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

为什么例题里初始化块和构造方法执行了两次

https://img3.mukewang.com/5c3da4810001cb8003530223.jpg

https://img1.mukewang.com/5c3da4820001fdd507670575.jpg

是因为构建了对象hello2吗,可是为什么构建了新对象就会再次执行呢

提问者:慕婉清6015292 2019-01-15 17:15

个回答

  • qq_慕先生9541480
    2019-01-16 08:49:06
    已采纳

    在创建完一次对象后程序执行时最先但只执行一次静态初始化,然后执行普通初始化块最后执行构造方法,然后再开始往下运行与该对象有关的命令,hello对象后输出了三条命令,hello2对象后面则没有命令了,故会在第二次再输出一次方法。

  • 慕盖茨7464940
    2019-07-01 15:51:10

    https://www.imooc.com/qadetail/288303

    我看到了这个答案,盆友可以参考一下

  • 慕盖茨7464940
    2019-07-01 15:45:42

    我用eclipse试了一下,确实会执行,虽然我也不懂这是为什么,创建了对象hello2,但是对象并没有被使用,为什么会执行呢?如果有人已经知道答案了可以告诉我一下这是为什么吗?谢谢啦

  • 慕先生6779645
    2019-03-29 12:47:25

    感觉也是,又没问你们为什么静态代码块没执行。

    我的理解是,创建类的对象就是执行代码块的过程,

    代码块已经建立输出短语,输出顺序是优先级的问题

    创建类的新的对象,还是执行同一类的代码块,只不过静态变量已经排除(只在类加载执行一次)

  • 慕仔3594337
    2019-02-16 22:03:37

    全都答非所问,厉害了

  • 慕雪8382090
    2019-01-18 10:53:55

    因为构建对象,需要对对象进行初始化,就回去调用构造函数,也就是这里的构造方法和初始化块,然后又因为静态初始化只执行一次,所以hello2初始化的时候就只有2句。

  • 毀夢千萬次4207175
    2019-01-16 16:28:17

    通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。