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

本题执行顺序与结果问题。

53941e320001fdd507670575.jpg

53941e880001cb8003530223.jpg

输出结果为什么不是这样子?main函数上面3个输出完不应该就到创建hello了,创建hello2都要执行一次num2初始化块和num3这个构造方法,为什么hello没有啊,请大家对比下输出结果,给我讲解一下谢谢。

通过静态初始化块为静态变量num3赋值

通过初始化块为变量num2赋值

通过构造方法为变量num1赋值

通过初始化块为变量num2赋值

通过构造方法为变量num1赋值

num1:91

num2:74

num3:83

通过初始化块为变量num2赋值

通过构造方法为变量num1赋值



正在回答

3 回答

已经将懂了谢谢各位,之前提问输出结果打字太着急,多打了几个字给大家造成误解抱歉

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

运行结果是这样的:

通过静态初始化块为静态变量num3赋值

通过初始化块为变量num2赋值

通过构造方法为变量num1赋值

num1:91

num2:74

num3:83

通过初始化块为变量num2赋值

通过构造方法为变量num1赋值

关于为什么不是你那样,其中最大的原因是程序中本来就没有你的那些输出语句“通过非静态初始化块为变量num2赋值”

至于为什么运行结果顺序是上面那样?

因为程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。另外,由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。


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

洛辰m 提问者

我就是这个意思,那个非静态是我打字多打了。为什么创建hello不执行,hello2就要执行呢。
2018-09-25 回复 有任何疑惑可以回复我~
#2

慕瓜453346 回复 洛辰m 提问者

为什么??/
2018-09-27 回复 有任何疑惑可以回复我~

输出结果是根据我们自己写的代码来的,如果写的代码中都没有“非静态”三个字,怎么会输出“非静态”呢?之所以会出现这些结果,是因为我们事先在特定位置写上特定的字,这样特定的字会根据运行的先后顺序显示。

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

洛辰m 提问者

非静态是我打错字了。。。我的意思是执行创建hello2时候运行了一次num2和num1,创建hello是怎么弄的,代码的顺序是怎么执行的
2018-09-25 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第二季 升级版
  • 参与学习       530696    人
  • 解答问题       6091    个

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

进入课程

本题执行顺序与结果问题。

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