直接上**:
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 新寫法只在不...