異常機制(Exception)
異常機制(Exception)
異常程式是指程式運行中出現的不期而至的各種狀況,如文件找不到,網路連接失敗,非法參數等。
異常發生在程式運行期間,它影響了正常的程式執行流程
檢查性異常
最具代表性的檢查性異常是用戶錯誤或問題引起的異常,這是程式設計師無法預見的,例如要打開一個文件時,一個異常就發生了,這些異常在編譯時,不能被簡單的忽略。
運行時異常
運行時的異常是可能被程式設計師避免的異常,與檢查性異常相反,運行時異常可以在編譯時被忽略
錯誤
錯誤不是異常,而是脫離程式設計師控制的問題,錯誤在程式碼中通常被忽略。例如,當棧溢出時,一個錯誤就發生了,它們在編譯時檢查不到。
Error
Error類對象由Java虛擬機生成並拋出,大多數錯誤與程式碼編寫者所執行的操作無關
Exception
在Exception分支中有一個重要的子類RuntimeException(運行時異常)
ArrayIndexOutOfBoundsException(數組下標越界)
NullPointerException (空指針異常)
ArithmeticException(算術異常)
MissingResourceExpection(丟失資源)
ClassNotFoundException(找不到類)
這些異常是不檢查異常,程式中可以選擇捕獲處理,也可以不處理
這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度儘可能避免這類異常的發生
Error和Exception的區別: Error通常是災難性的致命的錯誤,是程式無法控制和處理的,當出現這些異常時,Java虛擬機(JVM)一般會選擇終止執行緒;
Exception通常情況下是可以被程式處理的,並且在程式中應該儘可能的去處理這些異常。
異常處理
拋出異常
捕獲異常
異常處理的五個關鍵字:try,catch,finally,throw,throws
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sxbzBbsV-1642514881594)(C:\Users\28905\AppData\Roaming\Typora\typora-user-images\image-20220117200123709.png)]](http://img-blog.csdnimg.cn/1bd140e1acb140a58e757823873a5771.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5pyb56m_5YWI55SfeA==,size_20,color_FFFFFF,t_70,g_se,x_16)
Java把異常當作對象來處理,並定義一個基類java.lang.Throwable作為所有異常的超類。在Java API中已經定義了許多異常類
這些異常類分為兩大類:
錯誤Error和異常Exception.
注意:假設要捕獲多個異常,可以使用catch多分支實現,並且要按級別從小到大去捕獲(不能先Trowable再Exception)
IDEA快速生成try catch快捷鍵 Ctrl+Alt+T
public class test {
public static void main(String[] args) {
int a=1;
int b=0;
try {
System.out.println(a/b); //try監控區域
}catch (ArithmeticException e){ //catch捕獲異常,catch裡面的參數為捕獲的異常類型
System.out.println("ArithmeticException"+"程式出現異常,除數b不能為0");
}catch (Exception e){
System.out.println("Execption");
}catch (Throwable e){
System.out.println("Trowable");
}finally { //finally處理善後工作,最後一定執行
System.out.println("finally");
}
//try和catch是一定要有的部分,finally可有可無
}
}
通過throw關鍵字主動拋出異常,一般在方法中使用
throw用於在方法中拋出異常
throws用於在方法上拋出異常
throw new ArithmeticException();
public class Demo02 {
public static void main(String[] args) {
new Demo02().test(1,0);
}
//假設方法中處理不了這個異常,則可以在方法上拋出異常,使用Throws關鍵字
public void test(int a,int b) throws ArithmeticException{
if(b==0){
throw new ArithmeticException(); //主動拋出異常,一般在方法中使用
}
}
}
自定義異常
用戶自定義異常類,只需要繼承Exception類即可
在程式中使用自定義異常類,大體可分為以下幾個步驟:
1.創建自定義異常類。
2.在方法中通過throw關鍵字拋出異常對象
3.如果在當前拋出異常的方法中處理異常,可以使用try-catch語句捕獲並處理;否則在方法的聲明處通過throws關鍵字指明要拋出給方法調用者的異常,繼續進行下一步操作
4.在出現異常方法的調用者中捕獲並處理異常
異常總結
1.處理運行時異常時,採用邏輯去合理規避同時輔助try-catch 處理
2.在多重catch塊後面,可以加一個catch (Exception)來處理可能會被遺漏的異常對於不3.確定的程式碼,也可以加上 try-catch,處理潛在的異常
4.盡量去處理異常,切忌只是簡單地調用printStackTrace()去列印輸出具體如何處理異常,要根據不同的業務需求和異常類型去決定
5.盡量添加finally語句塊去釋放佔用的資源

