知識點:
1.異常的産生以及對于程式的影響;
2.異常處理的格式;
3.異常的處理流程;
4.Throw,throws關鍵字的使用;
5.異常處理的使用标準;
6.自定義異常.
異常的描述:
異常是導緻程式終端的一種指令劉,如果異常沒有進行合理處理的話,會導緻程式終端執 行
一旦出現異常,産生異常以後的語句不再執行
異常處理可以使程式即使出現了異常,也可以讓程式正常的執行完畢
處理異常格式:
Java提供了三個關鍵字 try catch finally
try{
//有異常的代碼
}catch(異常類型 對象){
//異常處理
}finally{
//不管是否出現異常,都執行的統一代碼
}
對于以上的操作組合:try...catch,try...catch...finally,try...finally(不建議使用)
使用異常處理,即使程式中出現了異常,也可以正常執行
出現異常的目的是解決異常,是以為了能夠進行異常的處理,可以使用異常類中提供的printStackTrace()方法進行異常資訊的輸出.
異常處理範例:
public class Test{
public static void main(String[] args) {
System.out.println("算術運算開始");
System.out.println(10/0);
}catch(Exception e){
e.printStackTrace();
System.out.println("不管是否有異常我都會執行");
System.out.println("算術運算結束");
異常處理流程(核心,帶面試題)
以java.lang.ArithmeticException為例檢視繼承架構:
java.lang.Object java.lang.Throwable java.lang.Exception java.lang.RuntimeExceptionjava.lang.ArithmeticException
所有的異常類都是Throwable的子類,Throwable下有兩個子類
面試題:請解釋Error和Exception的差別?
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);
})