1. 程式人生 > >try..catch..finally注意要點

try..catch..finally注意要點

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 語句或者丟擲異常,如果呼叫的其他程式碼可能丟擲異常,則應該捕獲異常並進行處理。