为了账号安全,请及时绑定邮箱和手机立即绑定

初始化块执行和对象的关系


http://img1.sycdn.imooc.com//5880d1120001956c10520789.jpg

创建对象是会执行初始化块吗,创建对象过程不就是执行构造方法的过程吗?和初始化块有关系吗?

正在回答

1 回答

    初始化块并不是创建对象时执行的,而是第一次用到那个类的时候执行的。

    以上面这个例子来说,程序执行main方法中第一句HelloWorld hello = new HelloWorld();的时候就会执行初始化块,而且只会执行一次。程序后面又创建了一个对象hello2,这个时候初始化块不执行,构造方法执行。只要记住初始化块是程序第一次调用类的时候执行(且只执行一次),而构造方法是每创建一个对象都会执行一次就行了。

    另外,它们执行的顺序是:静态初始化块先执行,然后非静态初始化块再执行,最后构造方法执行。相同类型的初始化块,按照定义时的顺序执行。

1 回复 有任何疑惑可以回复我~
#1

慕粉1205048519 提问者

非常感谢!
2017-01-20 回复 有任何疑惑可以回复我~
#2

慕粉1205048519 提问者

静态初始化块在加载类时执行,且只执行一次。那非静态初始化块在什么时候执行。图片中的代码执行创建对象hello2时输出了 通过初始化块为变量num2赋值 通过构造方法为变量num1赋值 这样的结果说明非静态初始化块在创建对象hello2的时候又执行了一次,对于非静态初始化块什么时候执行还是不太清楚。
2017-01-20 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

初始化块执行和对象的关系

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信