牛客網好題記錄01

2022-09-11 09:45:08 字數 2195 閱讀 5827

class

test

static

class

a

public

void setvalue(int

value)

public

intgetvalue()

finally}}

static

class b extends

a

public

void setvalue(int

value)

}}

本人看到此題,讀著讀著就一臉懵逼了,但是經過查閱資料以及大哥們的解答,學習到了很多,在此記錄一下此題,幫助大家共同學習和進步。

在main()函式中,首先new b()例項,此時b類中的無參建構函式現實的呼叫了父類a的帶參建構函式。

在父類a中的帶參建構函式中,又呼叫了setvalue(v)方法,但是在父類a和子類b中都有setvalue(v)方法,並且此時正在初始化的是乙個子類b的例項物件,根據j**a多型特性,此時會呼叫的是子類b中的setvalue(v)方法,而不是父類a中的setvalue(v)方法。

而在子類的setvalue()方法又顯示的呼叫了父類的setvalue()方法,將父類中的value值設定為了2*5=10

繼續執行b類構造方法中的setvalue(getvalue() - 3)方法。

在上面方法中先執行getvalue()方法,而在子類b中,沒有重寫父類的getvalue()方法,因此呼叫的是父類的getvalue()方法。在父類的getvalue()方法中,分為如下幾步:

在執行getvalue()方法之前,value值已經被設定為10。

value++後,value的值為11

將value值return返回出去

緊接著執行finally中的**,所以暫時性的將上一步中的value值儲存起來。等到finally**塊執行完成後再正真的將value值返回出去。

在finally中,又執行了setvalue()方法,此時執行的也是子類b中的setvalue()方法,因為此時我們正在初始化的是子類b的例項物件。(j**a執行時多型)

而在子類b中的setvalue()方法中又顯示的呼叫了父類a中的setvalue()方法,此時的value值又被設定為了2*11=22

緊接著執行finally**塊中的輸出語句,列印出value值為22

緊接著將try語句中的return語句進行返回,返回的是暫存的value值11

返回值11之後,繼續執行子類b中的setvalue()方法,此時setvalue()方法中的引數值為11-3=8,在執行setvalue()方法時,顯示的呼叫了父類的setvalue()方法,並將value值設定為了2*8=16

終於,我們執行完了main()方法中的new b()方法,此時的value值為16,緊接著呼叫main()方法中的new b()方法的後續的方法getvalue()方法

呼叫getvalue()方法,子類b中沒有重寫父類a的getvalue()方法,所以實際上執行的時父類中的getvalue()方法,步驟如下:在執行getvalue()方法之前,value值已經被設定為16。

value++後,value的值為17

將value值return返回出去

緊接著執行finally中的**,所以暫時性的將上一步中的value值儲存起來。等到finally**塊執行完成後再正真的將value值返回出去。

在finally中,又執行了setvalue()方法,此時執行的也是子類b中的setvalue()方法,因為此時我們正在初始化的是子類b的例項物件。(j**a執行時多型)

而在子類b中的setvalue()方法中又顯示的呼叫了父類a中的setvalue()方法,此時的value值又被設定為了2*17=34

緊接著執行finally**塊中的輸出語句,列印出value值為34

緊接著將try語句中的return語句進行返回,返回的是暫存的value值17

最後在main方法中列印返回的值,返回的值為17,列印17

最後控制台上的列印結果為22   34   17

具體流程就到此結束了,是不是感覺很麻煩,但是實際上很簡單,相信你也看出來了,實際上就是對多型的理解,麻煩的就是呼叫過來呼叫過去就暈了,只要理清思路還是很簡單的。

(注意:try語句中的返回值會先暫時儲存,等待finally**塊執行完成後再將暫存的值返回,finally**塊中的**不會影響暫時儲存的返回值哦!)

牛客網SQL刷題記錄

查詢入職員工時間排名倒數第三的員工所有資訊,為了減輕入門難度,目前所有的資料裡員工入職的日期都不是同一天 select from employees order by hire date desc limit2,1 or select from employees x where3 select s...

劍指offer 牛客網錯題記錄 四

題目 在乙個字串 1 字串長度 10000 中找到第乙個只出現一次的字元的位置。異常情況返回 1 這道題借助雜湊表,用空間換取執行時間,事件效率可以達到o n 就是首先遍歷字串,以字元的ascii碼為下標,對應的值為該字元出現的次數。再次遍歷字串,以字元為下標判斷雜湊表對應的值,如果為1則返回該索引...

c 牛客刷題記錄2 18

1.c 標籤使用 includeusing namespace std intmain 這裡執行不會報錯,http 作為標籤label的使用,可以實驗goto http 跳轉到這裡,進行cout語句。1 例子 2for int i 0 i 100 i 3 9 1011 中間可以有很多 1213 ca...