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日