try..catch..finally注意要點
阿新 • • 發佈:2018-12-22
1、如果在try或者catch語句內有return語句,則return語句在finally語句執行結束後才執行,但finally並不能改變返回值
public static int test(){
int ret = 0;
try{
return ret;
}finally{
ret = 2;
}
}
這個函式的返回值是0,而不是2。實際執行過程是:在執行到try內的return ret;語句前,會先將返回值ret儲存在一個臨時變數中,然後才執行finally語句,最後try再返回那個臨時變數,finally中對ret的修改不會被返回。
2、在finally有return語句的情況,try和catch內的return會丟失,實際會返回finally中的返回值。
public static int test(){
int ret=0;
try{
int a=5/0;
return ret;
}finally{
return 2;
}
}
同理,異常也會覆蓋
public static void test(){
try{
int a=5/0;
}finally{
throw new RuntimeException("hello");
}
}
總結:一般而言,為避免混淆,應該避免在finally中使用return 語句或者丟擲異常,如果呼叫的其他程式碼可能丟擲異常,則應該捕獲異常並進行處理。