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

为什么例题里初始化块和构造方法执行了两次

https://img1.sycdn.imooc.com//5c3da4810001cb8003530223.jpg

https://img1.sycdn.imooc.com//5c3da4820001fdd507670575.jpg

是因为构建了对象hello2吗,可是为什么构建了新对象就会再次执行呢

正在回答

7 回答

在创建完一次对象后程序执行时最先但只执行一次静态初始化,然后执行普通初始化块最后执行构造方法,然后再开始往下运行与该对象有关的命令,hello对象后输出了三条命令,hello2对象后面则没有命令了,故会在第二次再输出一次方法。

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

qq_单曲循环_ijxzB8

为什么hellow2后面没命令再输出一次,没说清楚
2019-01-24 回复 有任何疑惑可以回复我~

https://www.imooc.com/qadetail/288303

我看到了这个答案,盆友可以参考一下

0 回复 有任何疑惑可以回复我~

我用eclipse试了一下,确实会执行,虽然我也不懂这是为什么,创建了对象hello2,但是对象并没有被使用,为什么会执行呢?如果有人已经知道答案了可以告诉我一下这是为什么吗?谢谢啦

0 回复 有任何疑惑可以回复我~

感觉也是,又没问你们为什么静态代码块没执行。

我的理解是,创建类的对象就是执行代码块的过程,

代码块已经建立输出短语,输出顺序是优先级的问题

创建类的新的对象,还是执行同一类的代码块,只不过静态变量已经排除(只在类加载执行一次)

0 回复 有任何疑惑可以回复我~

全都答非所问,厉害了

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

因为构建对象,需要对对象进行初始化,就回去调用构造函数,也就是这里的构造方法和初始化块,然后又因为静态初始化只执行一次,所以hello2初始化的时候就只有2句。

4 回复 有任何疑惑可以回复我~

通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。

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

lucky高

请问什么叫类在加载时只执行一次,用通俗的话怎么理解呢,因为创建hello这个对象只不过是用了三次输出语句,而hello2只是创建完成,因是叫hello加载了类,而hello2没有加载类吗?谢谢~
2019-03-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么例题里初始化块和构造方法执行了两次

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