瀏覽器事件之事件處理程式
一、異常概念:
指的是程式在執行過程中,出現的非正常的情況,最終會導致JVM的非正常停止。
二、異常體系以及分類:
異常本身是一個類,產生異常就是建立異常物件並丟擲了一個異常物件。
Java處理異常的方式是中斷處理。
java.Lang.Throwable:類是Java語言中所有錯誤或異常的超類。
Exception:編譯異常,進行編譯(寫程式碼)java程式出現的問題
RuntimeException:執行期異常,java程式執行過程中出現的問題異常就相當於程式得了一個小毛病,把異常處理掉,程式可以繼續執行。
Error:錯誤就相當於程式得了一個無法治癒的毛病,必須修改原始碼,程式才能繼續執行;如:建立的陣列超出了給JVM分配的記憶體
異常的處理:(五個關鍵字:try、catch、finally、throw、throws)
三、異常的產生過程解析:
如果沒有一處對異常進行處理,
1.那異常會先產生於異常處;
2.誰呼叫該有異常的方法就拋給誰,
3.方法進行處理最終會丟擲給JVM,JVM會輸出異常並終止專案
異常的產生過程解析圖:
四、throw關鍵字
throw關鍵字作用:
1.可以使用throw關鍵字在指定的方法中丟擲指定的異常,
2.throw關鍵字是隻能處理RuntimeException或者是RuntimeException的子類物件的異常物件!
並不能處理編譯器異常!
使用格式:
throw new xxxException("異常產生的原因");
注意:
1. throw關鍵字必須寫在方法的內部
2. throw關鍵字後邊new的物件必須是Exception或者Exception的子類物件
3. throw關鍵字丟擲指定的異常物件,我們就自己必須處理這個異常物件((列印異常物件)
4.Throw關鍵字後邊建立的是RuntimeException或者是RuntimeException的子類物件,我們可以不處理,預設交給Jvm處理(列印異常物件,中斷程式 )
5.throw關鍵字後邊建立的是編譯異常(寫程式碼的時候報錯),我們就必須處理這個異常,要麼throws,要麼try...catch
Objects非空判斷_requireNonNull(作用:對方法引數進行非空判斷,null就丟擲空指標異常)
五、throws關鍵字
throws編譯異常處理方式:
交給別人處理,可起到通知別人有異常並要求別人進行接收該異常
throws作用:
當方法內部丟擲異常物件的時候,那麼我們就必須處理這個異常物件
可以使用throws關鍵字處理異常物件,會把異常物件宣告丟擲給方法的呼叫者處理(自己不處理,給別人處理),最終交給JVM處理-->中斷處理
使用格式: (在方法宣告時使用)
修飾符 返回值型別 方法名(引數列表) throws AAAExcepiton, BBBExcepiton...{
throw new AAAExCepiton ("產生原因");throw new BBBExcepiton("產生原因");..
}
注意
1.throws關鍵字必須寫在方法宣告處
2.throws關鍵字後邊宣告的異常必須是Exception或者是Exception的子類
3.方法內部如果丟擲了多個異常物件,那麼throws後邊必須也宣告多個異常
如果丟擲的多個異常物件有子父類關係,那麼直接宣告父類異常即可
4,呼叫了一個宣告丟擲異常的方法,我們就必須的處理宣告的異常
要麼繼續使用throws宣告丟擲,交給方法的呼叫者處理,最終交給JVM
要麼try...catch自己處理異常
缺點:
throws丟擲異常後就中斷處理,後面的程式碼就不再執行
六、try_catch_關鍵字
try_catch_編譯異常處理方式:
自己處理異常,不會拋給別人
格式:
try{
可能產生異常的程式碼
}catch(異常類名 變數名){-- catch方法中的變數為try中丟擲的異常物件;
異常的處理邏輯,異常異常物件之後,怎麼處理異常物件
一般在工作中,會把異常的資訊記錄到一個日誌中
}catch(異常類名 變數名){
處理異常物件
}
注意:
1.try中可能會丟擲多個異常物件,那麼就可以使用多個catch來處理這些異常物件
2.如果try中產生了異常,那麼就會執行catch中的異常處理邏輯,執行完畢catch中的處理邏輯,繼續執行try...catch之後的程式碼,如果try中沒有產生異常,那麼就不會執行catch中異常的處理邏輯,執行完try中的程式碼,繼續執行try...catch之後的程式碼
3.try中丟擲什麼異常物件,catch就定義什麼異常變數,用來接收這個異常物件
七、Throwable處理異常的方法:
String getMessage()返回此throwable的簡短描述。
String toString()返回此throvable的詳細訊息字串。
void printStackTrace() JVM列印異常物件,預設此方法,列印的異常資訊是最全面的
八、finally關鍵字
格式:finally程式碼塊
try{
可能產生異常的程式碼
}catch(異常類名 變數名){
異常處理程式碼
}finally{
無論出現什麼異常都能執行
}
注意:
1.finally不能單獨使用,必須和try一起使用
2.finally一般用於資源釋放(資源回收),無論程式是否出現異常,最後都要資源釋放(IO)
九、異常的注意事項:
多異常的捕獲處理
1.多個異常分別處理。
2.多個異常一次捕獲,多次處理。(注意事項:catch裡邊定義的異常變數,如果有子父類關係,那麼子類的異常變數必須寫在上邊,否則就會報錯,因為父類寫在前面則是多型!後面catch的子類則沒有用所有報錯)--子上父下,
3,多個異常一次捕獲一次處理。
注意:
1.執行時異常被丟擲可以不處理。即不捕獲也不宣告丟擲。預設給虛擬機器處理,終止程式,什麼時候不丟擲執行時異常了,再來繼續執行程式
2.finally有return語句,永遠返回finally中的結果,避免該情況
十、子父類異常 :
1.如果父類丟擲了多個異常,子類重寫父類方法時,丟擲的異常只能是以下異常:
(1)父類相同的異常
(2)父類異常的子類
(3)不丟擲異常。
2.父類方法沒有丟擲異常,子類重寫父類該方法時也不可丟擲異常。
3.父類方法沒有丟擲異常,子類產生該異常,只能捕獲處理,不能宣告丟擲
注意:
2.和3.在重寫父類方法時,不能給父類新增異常!父類異常是什麼樣,子類異常就什麼樣;
十一、自定義異常類:
java提供的異常類,不夠我們使用,需要自己定義一些異常類
格式:
public class XXXExcepiton extends Exception | RuntimeException{
新增一個空引數的構造方法:public XXXExcepiton (){ super() }
新增一個帶異常資訊的構造方法:public XXXExcepiton (String s){ super(s) }
}
注意:
1.自定義異常類一般都是以Exception結尾命名,說明該類是一個異常類
2.自定義異常類,必須的繼承Exception或者RuntimeException繼承Exception:那麼自定義的異常類就是一個編譯期異常,如果方法內部丟擲了編譯期異常,就必須處理這個異常,要麼throws,要麼try...catch繼承RuntimeException:那麼自定義的異常類就是一個執行期異常,無需處理,交給虛擬機器處理(中斷處理)