qq_51272174 2022-01-02 15:53 采纳率: 88.9%
浏览 28
已结题

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

img

img

  • 写回答

1条回答 默认 最新

  • 大鹏cool Java领域优质创作者 2022-01-02 18:04
    关注

    输出为:

    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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 1月10日
  • 已采纳回答 1月2日
  • 创建了问题 1月2日

悬赏问题

  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析
  • ¥200 sqlite3数据库设置用户名和密码
  • ¥15 AutoDL无法使用docker install吗?
  • ¥15 cups交叉编译后移植到tina sdk的t113,只需要实现usb驱动打印机,打印pdf文件
  • ¥30 关于#wireshark#的问题:需要网络应用流量数据集需要做长度序列的实验,需要与应用产生的会话的数据包的长度,如视频类或者聊天类软件
  • ¥15 根据上述描述表示泥浆密度沿着管路的长度方向在不断变化,如何来表示泥浆密度随管路的变化(标签-matlab|关键词-流计算)
  • ¥21 matlab可以把图像数据转换为小波分析吗
  • ¥60 基于香农编码的图像压缩算法实现
  • ¥15 matlabGUI绘制一个函数与其导数的图像