SOPHIA 2023-05-06 08:46 采纳率: 61.9%
浏览 19
已结题

关于JAVA代码的运行

这一段长的JAVA代码运行结果为什么是这样的?

img


这一段长的JAVA代码的运行结果为什么是这样的?

  • 写回答

1条回答 默认 最新

  • 关注

    new B()的时候回调用super(5),就是初始化A对象,在A(5)里调用了setValue(5),这里需要注意的是子类B重写了父类的setValue方法,这里记住,new的对象是谁,this就是谁,并不是说这段代码写在哪个类里,就执行的是哪个方法,这里你最初new的对象是B,所以this就是B,如果B重写了方法,就从B里找,否则从父类找,
    所以A(5)里调用的setValue是子类重写后的,
    在B重写的setValue里通过super指定调用了父类的setValue(25),所以value变成了10
    到这里super(5)这一句执行完成
    接着是setValue(getValue()-3),先执行getValue()
    因为子类没有重写getValue,所以从父类找这个方法,在try中value++,此时value变成了11,应该return 11。而finally里又调用了setValue,用的是子类的setValue,就是setValue(11),这里调用了super.setValue(2
    11),value变成了22,
    再执行finally里的输出,得到第一个输出22
    这时getValue执行完了,但finally里setValue不会影响之前的返回值11,
    接着是-3的操作,即执行了setValue(11-3),即super.setValue(28),value变成16
    这时new B()执行完了,该执行后面的getValue()。try里value++变成17,返回值是17,
    finally调用setValue(17),调用父类super.setValue(2
    17),value变成34,得到第二个输出。
    最后是main函数里的输出,用到的是返回值17,得到第三个输出

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

报告相同问题?

问题事件

  • 系统已结题 5月19日
  • 已采纳回答 5月11日
  • 创建了问题 5月6日

悬赏问题

  • ¥15 问题重发,R语言:代码运行过程中出现如下警告,请求如何解决!
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 苍穹外卖拦截器token为null
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关