Java对象的初始化顺序
一个具体的类进行对象实例化时,初始化顺序 (父类 静态变量初始化和静态代码块初始化【具体顺序取决于代码的顺序】) -> (父类构造方法)-> (自身类 静态变量初始化和静态代码块初始化) -> (自身类构造方法)
abstract class A{
static{
System.out.println("A的静态块");
}
private static int a = getA();
public A() { System.out.println("A的构造方法"); }
private static int a_1 = getA();
private static int getA() {
System.out.println("getA 静态方法");
return 0;
}
private static void printA() {
System.out.println("A的静态方法");
}
}
abstract class B extends A{
private static int b = getB();
static{
System.out.println("B的静态块");
}
public B(){ System.out.println("B的构造方法"); }
private static int getB() {
System.out.println("getB() 静态方法");
return 0;
}
}
class C extends B{
private static int c = getC();
static {
System.out.println("C 的静态块");
}
public C(){
super();//默认调用父类的无参构造方法
System.out.println("C的构造方法");
}
private static int getC() {
System.out.println("getC() 静态方法");
return 0;
}
}
/*
* 测试类
*/
public class basic_01 {
public static void main(String[] args) {
// 创建C对象
C c = new C();
}
}
A的静态块
getA 静态方法
getA 静态方法
getB() 静态方法
B的静态块
getC() 静态方法
C 的静态块
A的构造方法
B的构造方法
C的构造方法