

输出为:
v1.c=0 v2.c=0
v1.c=2 v2.c=2
ct.c=1
v1.c=1 v2.c=1
v1.c=2 v2.c=2
相关知识:
- 类加载到 JVM 时静态代码块先执行,成员变量后赋值。
打印结果解释如下:
- Demo 类中的 main 方法执行需要先将 Demo 加载到 JVM,此时先执行 Demo 类中的静态成员变量和静态代码块。
- Demo 类静态成员变量使用了 Value 类,因此需要先把 Value 类加载到 JVM,加载时执行 Value 类的静态代码块,执行后 Value 类的静态变量 c 的值为 0。
- 然后执行 Demo 类中的静态代码块
- 第一次调用
prt
方法打印的静态变量 c 的值为 0,结果为 v1.c=0 v2.c=0
。 - 然后调用 Value 有参构造方法,将静态变量 c 的值设置为 2。
- 第二次调用
prt
方法打印的静态变量 c 的值为 2,结果为 v1.c=2 v2.c=2
。
- Demo 静态代码块执行完毕后开始执行 main 方法。
- main 方法先实例化 Demo 类,实例化时为成员变量 v 赋值,调用 Value 有参构造方法,将 Value 类中的静态变量 c 赋值为 1。
- main 方法第一次调用
prt
打印的静态变量 c 的值为 1,结果为 ct.c=1
。 - main 方法第二次调用
prt
打印的静态变量 c 的值为 1,结果为 v1.c=1 v2.c=1
。 - main 方法调用 Value 类的 inc 方法将静态变量 c 的值加 1,此时 c 的值为 2。
- main 方法第三次调用
prt
打印的静态变量 c 的值为 2,结果为 v1.c=2 v2.c=2
。
这个问题截图代码较为分散,并且解释起来比较费劲,因此大家回答的热情不是很高,敲了这么多字,如果给题主带来了帮助,就给个采纳吧。。