java異常解決機制:Exception
java中異常報錯如圖:
main:表示main方法執行緒;
java.util.InputMismatchException:表示列印當前異常型別;
下面為可能出錯行數,有些還有原因:by:***
java中提供了異常解決機制,幫助處理異常情況:
異常解決辦法:
第一種:try catch(try catch finally)
異常解決結構:
try{
//可能出現異常的程式碼段
}catch(匹配的異常){
解決辦法//執行的程式碼段
}
異常解決執行過程:1、先執行try塊,如果出現異常,匹配catch中的異常
2、如果匹配到了,那麼執行catch塊中的內容
3、catch中執行之後 程式繼續向下執行
4、如果catch中匹配失敗了,那麼相當於程式沒有當前異常的解決手段,jvm會幫助我們解決該異常
try-catch異常解決中的注意點:
1、能夠捕獲的異常太少了,如果存在大量異常那麼還是jvm在解決
2、catch塊中可以通過編寫父類 Exception 來捕獲try塊中的所有異常,但是處理方式過於單一,不推薦使用。
try{ //可能出現異常的程式碼段 }catch(匹配的異常){ 解決辦法 //執行的程式碼段 }catch(匹配的異常){ 解決辦法 //執行的程式碼段 }catch(匹配的異常){ 解決辦法 //執行的程式碼段 }
執行順序:
1、執行try塊中的內容 如果有異常
2、匹配下面所有catch塊 如果匹配到 執行對應catch中的 內容跳過整個try-catch,執行後續程式碼
3、如果沒有對應的catch匹配, jvm處理該異常
注意事項:
1、一般情況下 我們會在多重catch中最後新增一個Exception,拍捕獲未知異常,統一處理
2、Exception捕獲應該放到catch最後,因為異常會從第一個catch開始匹配,如果第一個是Exception,那麼會導致
Exception捕獲所有異常,因為Exception是所有異常的父類
執行順序try{ //可能出現異常的程式碼段 }catch(匹配的異常){ 解決辦法 //執行的程式碼段 }catch(匹配的異常){ 解決辦法 //執行的程式碼段 }catch(匹配的異常){ 解決辦法 //執行的程式碼段 。。。。。 }finally{ //執行程式碼 }
1、執行try塊中的內容 如果有異常
2、匹配下面所有catch塊 如果匹配到 執行對應catch中的 內容跳過整個try-catch,執行後續程式碼
3、如果沒有對應的catch匹配, jvm處理該異常
4、執行完整個try-catch 最後都會執行finally
注意事項
1、finally最後肯定會被執行
2、return不能阻止finally執行 先執行finally再執行return
3、如果要強制不執行finally,通過System.exit(0或者是一個非0的數); 0 代表正常退出 非0 非正常退出
第二種:throws (throw)
throws: 拋 出很多
丟擲異常,不解決。 解決異常的一種方式,聽天由命 統一交由jvm解決
在方法的形參列表之後 通過 throws 對外丟擲異常,這個異常可以是一個 也可以很多。
throws 丟擲執行時異常時 呼叫該方法是 可以不對丟擲的異常進行處理,因為執行時異常只有程式執行期間才能捕獲
在方法後新增throws關鍵詞 用來向上丟擲異常資訊:
執行時異常:
呼叫異常方法時 不會報錯 ,所以很難判定是否存在異常。
檢查時異常:
程式呼叫時會報錯:
解決方案:
1、繼續向上拋 簡單 但是不能解決問題
2、手動try-catch 複雜 但是使用者體驗度好 能精準定位到問題出錯的地方
throw:
定義在方法裡面 和throws一起使用
不要將throw產生的異常 try-catch
很多時候。jdk提供的異常都不滿足場景需要,所以需要自己建立一個自定義異常:
自定義異常:
1、讓當前類繼承 Exception
2、編寫空構造器以及帶參構造顯示的呼叫父類中的空構造和帶參構造
程式異常:所有的異常類都是java.lang.Exception的子類;
java.util.InputMismatchException:由Scanner丟擲,表明獲取的標記與期望型別的模式不相匹配,或者該標記超出期望型別的範圍。
java.lang.IllegalStateExceptiom:在非法或不適當的時間呼叫方法時產生的訊號。換句話說,即 Java 環境或 Java 應用程式沒有處於請求操作所要求的適當狀態下。
java.lang.ArithmeticException:當出現異常的運算條件時,丟擲此異常。例如,一個整數“除以零”時,丟擲此類的一個例項。
java.lang.NullPointerException:當應用程式試圖在需要物件的地方使用 null
時,丟擲該異常。這種情況包括:
呼叫 null
物件的例項方法。
訪問或修改 null
物件的欄位。
將 null
作為一個數組,獲得其長度。
將 null
作為一個數組,訪問或修改其時間片。
將 null
作為 Throwable
值丟擲。
java.lang.ClassCastException:當試圖將物件強制轉換為不是例項的子類時,丟擲該異常。例如,以下程式碼將生成一個 ClassCastException
:
Object x = new Integer(0); System.out.println((String)x);