为什么会是这个输出啊,能解释下吗

img

img

输出为:

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

这个问题截图代码较为分散,并且解释起来比较费劲,因此大家回答的热情不是很高,敲了这么多字,如果给题主带来了帮助,就给个采纳吧。。