JAVA对象的初始化顺序

在JAVA面试或者笔试的时候经常会出现JAVA对象的初始化顺序的问题,下面我就初始化顺序做一个简单的介绍

JAVA对象的初始化顺序如下:

当类被加载的时候首先会初始化这个类的成员变量,而初始化成员变量的时候又遵循以下的顺序,首先初始化成员变量中的静态成员或者静态代码块(static {}中间的代码)。如果静态成员是基本类型的话那么首先初始化为相应类型的默认值。如果成员是对象的话,那么初始化此类变量如果需要加载其类型所在类,在加载这个类的时候也遵循以上的顺序。下面有一个简单的例子说明这个问题


class Duck{
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对象的初始化应该能得到一定的深入理解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值