Java異常處理
Java的基本理念是“結構不佳的代碼不能運行”--Thinking in Java。
Java中的異常處理是一種在編譯階段的錯誤報告機制,是通過編譯器強制執行的。不過尚須明白的
是:編譯期間並不能找出所有的錯誤,餘下的問題必須在運行期間解決。
簡單的來說,異常處理目的在於通過少量的代碼是你的程序更加可靠。
try、catch、finally巧遇return
對於Java中異常如何使用,這裏筆者不在提及。這裏筆者感興趣的是try、catch、finally塊中遭遇
return語句時的執行情況,以及其返回值情況(總有這些筆試、面試題)。
首先需要注意的是方法執行到return語句便會返回結果並終止是錯誤的,特例就是Java的異常體系。
看下面的例子程序:
package com.al;
public class ExceptionTest{
@SuppressWarnings("finally")
public String test(){
String returnStr ="start";
try {
System.out.println("start String:"+returnStr);
returnStr="try innner";
throw new Exception("inner Exception");
} catch (Exception e) {
returnStr ="catch inner";
return returnStr;
}finally{
returnStr = "finally";
System.out.println("inner finally:"+returnStr);
return returnStr;
}
}
public static void main(String[] args) {
ExceptionTest exceptionTest = new ExceptionTest();
try {
String test= exceptionTest.test();
Thread.sleep(300);
System.out.println("returnString:"+test);
} catch (InterruptedException e) {
// TODO: handle exception
}
}
}
輸出結果爲:
start String:start
inner finally:finally
returnString:finally
掌握下面的幾條規則我們就可以很好的解決巧遇return的問題了。
1、finally語句塊的代碼是必定會執行的,而catch語句塊的代碼只有發生異常時才能執行
2、方法執行碗try中的return之後不會終止,會繼續執行catch(try中拋出異常時)、finally塊
3、方法必須確保返回值,且該值唯一。
4、return語句的優先級是finally最大,且try、catch兩者之一的return會被執行,爲保證
第3條原則,返回優先級最大的值。
對於一個具有返回值的方法來說,保證該方法具有一個返回值在編譯階段就必須被確認。
try中如果包含return語句,則catch塊和finally中必須有一個return語句.。另一種情況是try中通過
throw拋出異常,同樣catch與finally至少有一個retrun語句。因爲try塊會假定其中發生異常,
且try塊中的代碼要麼順利執行,要麼拋出異常。如果只在try塊中包含return語句不能保證函數有
返回值(如try拋出時,return語句不會執行)。所以爲了保證函數具有返回值,java強制要求原則。