java try與catch的一道面試題

2021-08-16 21:47:27 字數 832 閱讀 8434

直接上**:

public

class test

public

static string test() catch(exception e)finally

}}

剛看到題目,覺得毫無疑問是」finally」,然而並不是。。。

難道finally沒有執行?

於是加上除錯語句,如上,

輸出順序為first, second, try,沒問題,那麼問題出在哪?

後來,寫了如下**:

public

static string test()

try

return

str;

}catch(exception e)

return

str;

}finally

}}

只輸出了」equals in out」, 也就是try, catch, finally三個**塊裡的str都不是原來的str。

又寫了以下**:

string str = "eee";

string p = str;

str = "aaa";

if(p == str)

}

只輸出了」equals1」,可以看出,**塊中,如果對外部定義的變數重新賦值,系統會用乙個新的記憶體塊來放這個新值。

回到一開始的題目,str = 「finally」 這句**,系統為finally**塊裡的str分配了乙個新的記憶體塊,所以並不影響原來的str = 「try」,所以輸出還是」try」。

Java try與finally的說明

任何呼叫try 或者catch中的return語句之前,都會先執行finally語句,當然前提是finally存在。如果finally中有return語句,那麼程式就return了,所以finally中的return是一定會被return的,編譯器把finally中的return實現為乙個warni...

Java try和finally的用法

在 中,可以使用try 塊進行防止錯誤導致應用崩潰 try 這時,在try後面的大括號位置就會報錯,這是因為try語句需要和catch語句一起使用 try catch exception e try和catch兩者是不可分開的,如果try裡面丟擲了異常,catch就會捕捉到這個異常,執行catch內...

catch 語句的引數

目前,有乙個提案,允許try.catch結構中的catch語句呼叫時不帶有引數。這個提案跟引數有關,也放在這一章介紹。傳統的寫法是catch語句必須帶有引數,用來接收try 塊丟擲的錯誤。try catch error 新的寫法允許省略catch後面的引數,而不報錯。try catch 新寫法只在不...