这一段长的JAVA代码运行结果为什么是这样的?
这一段长的JAVA代码的运行结果为什么是这样的?
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(211),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(217),value变成34,得到第二个输出。
最后是main函数里的输出,用到的是返回值17,得到第三个输出