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

来源:8-10 Java 中的 static 使用之静态初始化块

洛辰m

2018-09-25 10:22

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回答

  • 洛辰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 时并未执行静态初始化块。


    慕瓜4533... 回复洛辰m

    为什么??/

    2018-09-27 19:58:10

    共 2 条回复 >

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

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

    洛辰m

    非静态是我打错字了。。。我的意思是执行创建hello2时候运行了一次num2和num1,创建hello是怎么弄的,代码的顺序是怎么执行的

    2018-09-25 11:34:06

    共 1 条回复 >

Java入门第二季 升级版

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

530653 学习 · 6091 问题

查看课程

相似问题