在JAVA面试或者笔试的时候经常会出现JAVA对象的初始化顺序的问题,下面我就初始化顺序做一个简单的介绍
JAVA对象的初始化顺序如下:
当类被加载的时候首先会初始化这个类的成员变量,而初始化成员变量的时候又遵循以下的顺序,首先初始化成员变量中的静态成员或者静态代码块(static {}中间的代码)。如果静态成员是基本类型的话那么首先初始化为相应类型的默认值。如果成员是对象的话,那么初始化此类变量如果需要加载其类型所在类,在加载这个类的时候也遵循以上的顺序。下面有一个简单的例子说明这个问题
Duck(){
System.out.println("init Duck");
}
}
class Cat {
static int i ;
Duck duck = new Duck();
static {
System.out.println("init static i=" +i);
i = 12;
System.out.println("init static i=" +i);
}
Cat() {
System.out.println("initCat");
}
}
class Dog {
Cat cat = new Cat();
Dog() {
System.out.println("initDog");
System.out.println("cat=" + cat);
}
}
public class SortTest {
public static void main(String[] args) {
Dog d= new Dog();
}
}
此方法最终输出结果为
init static i=0
init static i=12
init Duck
initCat
initDog
cat=com.test.liyong.Cat@dc8569
我们可以按照以上的理论去一步步看看这个方法是怎么执行的~相信弄明白这些之后,JAVA对象的初始化应该能得到一定的深入理解