输出结果为什么不是这样子?main函数上面3个输出完不应该就到创建hello了,创建hello2都要执行一次num2初始化块和num3这个构造方法,为什么hello没有啊,请大家对比下输出结果,给我讲解一下谢谢。
通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:91
num2:74
num3:83
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
已经将懂了谢谢各位,之前提问输出结果打字太着急,多打了几个字给大家造成误解抱歉
运行结果是这样的:
通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:91
num2:74
num3:83
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
关于为什么不是你那样,其中最大的原因是程序中本来就没有你的那些输出语句“通过非静态初始化块为变量num2赋值”
至于为什么运行结果顺序是上面那样?
因为程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。另外,由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
输出结果是根据我们自己写的代码来的,如果写的代码中都没有“非静态”三个字,怎么会输出“非静态”呢?之所以会出现这些结果,是因为我们事先在特定位置写上特定的字,这样特定的字会根据运行的先后顺序显示。