何爲異常?
異常:指的是程序在執行過程中,出現的非正常的情況,最終會導致JVM的非正常停止。
在Java等面向對象的編程語言中,異常本身是一個類,產生異常就是創建異常對象並拋出了一個異常對象。
Java處理異常的方式時中斷處理。
注意:異常指的並不是語法錯誤,語法錯了,因爲編譯不通過,不會產生字節碼文件,根本不能運行。
異常處理的幾種方式
1、 throw關鍵字
作用:使用throw關鍵字在指定的方法中拋出指定的異常。
使用格式:
throw new xxxException("異常產生的原因");
注意:
- throw關鍵字必須寫在方法的內部
- throw關鍵字後邊new的對象必須是Exception或者Exception的子類對象
- throw關鍵字拋出指定的異常對象,我們就必須處理這個異常對象
2、Objects非空判斷
Objects類中的靜態方法
public static <T> T requireNonNull(T obj):查看指定引用對象不是null
源碼:
public static <T> T requireNonNull(T obj){
if(obj==null)
throw new NullPointerException();
return obj;
}
3、throws關鍵字
作用:
當方法內部拋出異常對象的時候,那麼我們就必須處理這個異常對象。使用throws關鍵字處理異常對象,會把異常對象拋出給方法的調用者處理(自己不處理,給別人處理),最終交給JVM處理–>中斷處理
使用格式:
修飾符 返回值類型 方法名(參數列表) throws AAAExcption,BBBException...{
throw new AAAException("產生原因");
throw new BBBException("產生原因");
...
}
注意:
- throws關鍵字必須寫在方法聲明處
- throws關鍵字後邊聲明的異常必須是Exception或者是Exception的子類
- 方法內部如果拋出了多個異常對象,那麼throws後邊必須也聲明多個異常;如果拋出的多個異常對象有子父類關係,那麼直接聲明父類異常即可
- 調用了一個聲明拋出異常的方法,我們就必須的處理聲明的異常
4、try…catch
作用:自己處理異常
使用格式:
try{
可能產生異常的代碼;
}catch(定義一個異常的變量,又來接收try中拋出的異常對象){
異常的處理邏輯,異常對象之後,怎麼處理異常對象
一般會記錄在一個日誌中
}
...
catch(異常類名 變量名){
}
注意:
- try中可能會拋出多個異常對象,那麼就可以使用多個catch來處理這個異常對象
- 如果try中產生了異常,那麼就會執行catch中的異常處理邏輯,執行完畢catch中的處理邏輯,繼續執行try catch之後的代碼
- 如果try中沒有產生異常,那麼就不會執行catch中異常的處理邏輯,執行完try中的代碼,繼續執行try開始之後的代碼
5、finally代碼塊
格式
try{
可能產生異常的代碼;
}catch(定義一個異常的變量,又來接收try中拋出的異常對象){
異常的處理邏輯,異常對象之後,怎麼處理異常對象
一般會記錄在一個日誌中
}
...
catch(異常類名 變量名){
}finally{
無論是否出現異常都會執行
}
注意:
- Finally不能單獨使用,必須要和try一起使用
- Finally一般用於資源釋放,無論程序是否出現異常,最後都要資源釋放(IO)
6、自定義異常類
如果java提供的異常類不夠我們使用,需要自己定義一些異常類
格式:
public class XXXException extends Exception|RuntimeException{
添加一個空參數的構造方法;
添加一個帶異常信息的構造方法;
}
注意:
- 自定義異常類一般都是以exception結尾,說明該類是一個異常類
- 自定義異常類必須繼承exception或者RuntimeException