这段代码怎么运行的?

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

听见你流泪

2015-12-16 17:06

http://img.mukewang.com/567128a90001eb8207660567.jpg

我认为运行结果为

http://img.mukewang.com/5671294e00010faf03590105.jpg

还有不明白创建类对象hello2的意思

写回答 关注

3回答

  • RockenRoll
    2015-12-16 18:10:30

    最后输出的结果应该是:

    通过静态初始化块为静态变量num3赋值
    通过初始化块为变量num2赋值
    通过构造方法为变量num1赋值
    num1:91

    num2:74

    num3:83
    通过初始化块为变量num2赋值
    通过构造方法为变量num1赋值

    _Jack_...

    HelloWorld hello2=new HelloWorld();调用的是构造方法,所以后面再次输出“通过构造方法为变量num1赋值”。为什么还会输出一次初始化块呢?

    2015-12-30 23:55:12

    共 1 条回复 >

  • Werber丶
    2015-12-16 18:09:10

    楼上不对啊

    加载一个类时,先执行静态初始化块,再执行普通初始化块,最后执行构造方法

    所以 结果就是 num3,num2,num1,楼主说的是正确的

    为什么创建hello2?

    因为静态初始化块,在类第一次加载时执行,之后就不会执行了,但它是一直存在的,因为第一次执行之后会把它保存在内存中,所以一直存在,你可以测试一下,new hello2 的时候 不会执行“通过静态...”那句话,但输出hello2.num3时 还可以得出值是83。

    听见你流泪

    多谢,还有一点不明就是:我知道会输出“通过.... ”,不明白为什么也会输出”num “

    2015-12-16 18:16:12

    共 1 条回复 >

  • RockenRoll
    2015-12-16 17:19:04

    应该是num1、num2、num3的顺序输出啊。你现在能理解什么是类什么是对象吗,建议你在看看前面类和对象那一章节

Java入门第二季 升级版

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

530649 学习 · 6091 问题

查看课程

相似问题