異常的捕獲及處理

必須往前走發表於2017-09-15

 

知識點:

1.異常的產生以及對於程式的影響;

2.異常處理的格式;

3.異常的處理流程;

4.Throw,throws關鍵字的使用;

5.異常處理的使用標準;

6.自定義異常.

異常的描述:

異常是導致程式終端的一種指令劉,如果異常沒有進行合理處理的話,會導致程式終端執 行

一旦出現異常,產生異常以後的語句不再執行

異常處理可以使程式即使出現了異常,也可以讓程式正常的執行完畢

 

 

處理異常格式:

Java提供了三個關鍵字 try catch finally

try{

//有異常的程式碼

}catch(異常型別 物件){

//異常處理

}catch(異常型別 物件){

//異常處理

}catch(異常型別 物件){

//異常處理

}finally{

//不管是否出現異常,都執行的統一程式碼

}

 

對於以上的操作組合:try…catch,try…catch…finally,try…finally(不建議使用)

使用異常處理,即使程式中出現了異常,也可以正常執行

出現異常的目的是解決異常,所以為了能夠進行異常的處理,可以使用異常類中提供的printStackTrace()方法進行異常資訊的輸出.

 

異常處理範例:

public class Test{

public static void main(String[] args) {

System.out.println(“算術運算開始”);

try{

System.out.println(10/0);

}catch(Exception e){

e.printStackTrace();

}finally{

System.out.println(“不管是否有異常我都會執行”);

}

 

System.out.println(“算術運算結束”);

}

}

異常處理流程(核心,帶面試題)

java.lang.ArithmeticException為例檢視繼承架構:

java.lang.Object

  java.lang.Throwable

      java.lang.Exception

          java.lang.RuntimeException

              java.lang.ArithmeticException

所有的異常類都Throwable的子類,Throwable下有兩個子類

面試題:請解釋ErrorException的區別?

Error:指的是JVM錯誤,即:此時的程式沒有執行,使用者不能執行

Exception:指的程式執行中產生的異常,使用者可以處理

也就是說所謂的異常處理指的是所有的Exception以及它的子類異常

面試題:請解釋java中的異常處理流程

 

1.當程式在執行過程中出現了異常後,那麼會由jvm自動根據異常的型別例項化一個與之匹配的異常類物件;

2.產生了異常物件之後,會判斷當前的語句上是否存在有異常處理,如果沒有異常處理,那麼就交給JVM進行預設的異常處理,處理的方式:輸出異常資訊.而後結束程式的執行;

3.如果此時存在有異常的捕獲操作,那麼會由try語句來捕獲產生的異常類例項化物件,而後與try以後的每一個catch語句進行比較,如果有符合的catch捕獲型別,則使用當前的catch語句來進行異常的處理,如果不符合就繼續向下匹配後面的catch;

4.不管最後異常處理是否能夠匹配,那麼都要向後執行,如果此時程式中存在有finally語句,如果有,就先執行finally語句,但是執行完畢後需要根據之前的catch匹配結果來決定如何執行,如果之前有匹配到catch語句,那麼就繼續執行finally之後的程式碼,如果之前沒有匹配到相應的catch語句.那麼就將此異常交給jvm處理,輸出異常資訊,結束程式執行

整個過程就好比方法過載一樣,catch就好比方法名,根據catch後的引數進行型別匹配,但是所有java物件都存在有自動的向上轉型的操作支援,如果說真的要匹配型別,簡單的做法就是匹配Exception就夠了

兩點說明:

1.在編寫多個catch捕獲異常的時候,捕獲範圍大的異常一定要放在捕獲異常範圍小的後,否則程式編譯報錯

2.雖然直接捕獲Exception比較方便,但是這樣也不好,因為所有的異常都會按照同樣一種方式進行處理;一些要求嚴格的專案裡面,異常一定要分開處理.

 

throws關鍵字

throws關鍵字主要用於方法宣告上,指的是當方法之中出現異常後交由被呼叫處處理

也就說呼叫了具有throws宣告的方法之後,不管操作是否出現異常,都必須使用try…catch來進行異常處理

在主方法上如果繼續丟擲異常,那麼這個異常就交給JVM進行處理,也就是採用預設的處理方式,輸出異常資訊,而後結束程式呼叫

主方法上不要加上throws,因為程式如果出錯了,也希望能夠正常執行.

throw關鍵字

在程式中可以使用throw手動丟擲異常

面試題:請解釋throw和throws的區別

throw:指的是在方法之中人為丟擲一個異常類物件(這個異常類物件可能是自己例項化,或者丟擲已經存在的)

throws:在方法的宣告上使用,表示此方法在呼叫時必須處理異常,可以宣告多個

 

RuntimeException類 執行時異常

這種異常類的最大特徵在於:程式在編譯的時候不會強制性的要求使用者處理異常,使用者可以根據自己的需要選擇性的處理異常,如果使用者沒有處理,產生異常了,將交給JVA處理,也就是說RuntimeException的子異常類.使用者可以根據情況處理

面試題:請解釋Exceprion與RuntimeException的區別?請列舉出幾個你常見的RuntimeException

1.Exception是RuntimeException的父類;

2.使用過Exception定義的異常必須要被處理,而RuntimeException的異常可以選擇性處理;

常見的RuntimeException:ArithmeticException,NullPointerException, ClassCastException

 

 

自定義異常

自定義異常類可以繼承Exception(強制處理異常)或者RuntimeException(選擇性處理異常

class AddException extends Exception{

public AddException(String msg){

super(msg);

}

})

 

 

 

 


相關文章