一個關於java調用順序的題目

在牛客網上刷到了一道很有意思的java題



這道題還是有一些繞的,但是如果對java的調用順序十分了解的話,做對這道題也很容易。

首先程序執行了new B(),new B裏上來super(5),我們就要去找到B的父類A中的構造方法,A中的構造方法執行了一步setValue(),這裏是第一個重點,就是這個setValue執行的是A的setValue還是B的setValue。

這裏因爲我們執行的是new  B,所以我們首先要去找的是B中的setValue方法,如果B中沒有setValue(),程序纔會去實現父類A的setValue方法。

所以這個時候v的值實際上是10.。到了這一步super(5)就執行完了。

接着向下執行setValue(getValue()-3)。

B中並沒有getValue(),所以去找他的父類A的getValue方法。value++,value的值變成11,再執行finally部分,this.setValue顯然又是調用了B的setValue方法,所以這個時候輸出的是22。但是這個時候要注意,返回的value值依然是11。因爲try 中的return已經返回了value。

接下來按照這個思路,就可以很輕鬆的分析出程序的執行結果了



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章