问答详情
源自:8-10 Java 中的 static 使用之静态初始化块

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

53941e320001fdd507670575.jpg

53941e880001cb8003530223.jpg

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

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

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

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

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

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

num1:91

num2:74

num3:83

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

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



提问者:洛辰m 2018-09-25 10:22

个回答

  • 洛辰m
    2018-09-25 17:23:46

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

  • 九宸
    2018-09-25 13:31:57

    运行结果是这样的:

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

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

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

    num1:91

    num2:74

    num3:83

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

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

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

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

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


  • mm_3
    2018-09-25 11:30:31

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