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

这段代码怎么运行的?

http://img1.sycdn.imooc.com//567128a90001eb8207660567.jpg

我认为运行结果为

http://img1.sycdn.imooc.com//5671294e00010faf03590105.jpg

还有不明白创建类对象hello2的意思

正在回答

3 回答

最后输出的结果应该是:

通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:91

num2:74

num3:83
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值

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

_Jack_Han_

HelloWorld hello2=new HelloWorld();调用的是构造方法,所以后面再次输出“通过构造方法为变量num1赋值”。为什么还会输出一次初始化块呢?
2015-12-30 回复 有任何疑惑可以回复我~

楼上不对啊

加载一个类时,先执行静态初始化块,再执行普通初始化块,最后执行构造方法

所以 结果就是 num3,num2,num1,楼主说的是正确的

为什么创建hello2?

因为静态初始化块,在类第一次加载时执行,之后就不会执行了,但它是一直存在的,因为第一次执行之后会把它保存在内存中,所以一直存在,你可以测试一下,new hello2 的时候 不会执行“通过静态...”那句话,但输出hello2.num3时 还可以得出值是83。

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

听见你流泪 提问者

多谢,还有一点不明就是:我知道会输出“通过.... ”,不明白为什么也会输出”num “
2015-12-16 回复 有任何疑惑可以回复我~

应该是num1、num2、num3的顺序输出啊。你现在能理解什么是类什么是对象吗,建议你在看看前面类和对象那一章节

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

举报

0/150
提交
取消

这段代码怎么运行的?

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