java異常體系:

Throwable是所有異常和錯誤的超類。兩個子類Error和Exception分别表示錯誤和異常。Error是程式無法處理的,JVM一般會選擇終止退出;Exception是程式可以捕獲并處理的,Exception分為檢查異常和非檢查異常(也稱運作時異常)。
- Checked Exception:Java語言規定必須在程式中對Checked Exception進行處理,編譯器會對此作出檢查。
- Runtime Exception:編譯器不會檢查程式是否對運作時異常做了處理,在程式代碼中也不必捕獲運作時異常的對象,也不必在方法體中聲明抛出運作時異常。它表示的是程式設計發生了錯誤,需要去找出錯誤修改代碼,而不是捕獲異常。
java異常處理機制
- try關鍵字: 後面緊跟一個代碼塊,try塊放置可能引發異常的代碼。
- catch關鍵字: 對應一個異常類型和一個代碼塊,catch塊中即是錯誤處理代碼。
- finally關鍵字: finally塊總是在方法傳回前執行,用于回收一些實體資源。
- throw關鍵字: 抛出一個具體的異常對象。
- throws關鍵字: 主要在方法簽名中使用,用于聲明可能抛出的異常。
java異常處理流程
- 抛出(throw)異常:try塊中的業務功能實作代碼出現異常,系統自動生成一個異常對象,異常對象送出給Java運作時環境。
- 捕獲(catch)異常:Java運作時環境接收異常對象後,尋找處理該異常對象的catch塊。
完整的異常處理文法
1.目前方法明确知道該如何處理異常,則程式應該使用try...catch塊來捕獲異常,然後在對應的catch塊中修複異常。
try{
//業務實作代碼
}catch(SubException e){
//異常處理代碼
}finally{
//異常發生,方法傳回之前,總是要執行的代碼
}
當Java程式執行try塊、catch塊時遇到return或者throw語句,系統不會立刻結束該方法,而是尋找異常處理流程是否包含finally塊。如果沒有包含finally塊,程式立即執行return或者throw語句,方法終止;如果包含finally塊,系統立即開始執行finally塊,執行完finally塊之後再次跳回來執行try塊、catch塊裡的return或者throw語句。
2.目前方法不知道如何處理這種異常,則在定義方法的使用聲明抛出該異常。該異常由上一級調用者處理。
throws ExceptionClass1,ExceptionClass2...
3.程式自行抛出異常
throw ExceptionInstance;
如果throw語句抛出的異常是Checked異常對象,則該語句必須位于try塊裡,顯示捕獲該異常;或者放在一個帶throws聲明抛出的方法中,交由方法調用者處理。
如果throw語句抛出的異常是Rutime異常,可以完全不理會該異常。