Window10安裝Mysql
阿新 • • 發佈:2020-12-19
Java異常學習
什麼是異常
- 異常 Exception
- 異常指程式執行中出現的不期而至的各種狀況,如:檔案找不到、網路連線失敗、非法引數等
- 異常發生再程式執行期間,它影響了正常的程式執行流程
簡單分類
- 檢查性異常:最具代表的檢查性異常是使用者錯誤或問題引起的異常,這是程式設計師無法預見的
- 執行時異常:執行時異常是可能被程式設計師避免的異常。與檢查性異常相反,執行時異常可以在編譯時被忽略
- 錯誤ERROR:錯誤不是異常,而實脫離程式設計師控制的問題。錯誤在程式碼中通常被忽略。例如:當棧溢位時,一個錯誤就放生了,它們在編譯也檢查不到的
Error
- Error類物件由Java虛擬機器生成並丟擲,大多數錯誤與程式碼編寫者所執行的操作無關
- Java虛擬機器執行錯誤(Virtual MachineError),當JVM不再有繼續執行操作所需的記憶體資源時,將出現OutOfMemoryError。這些異常發生時,Java虛擬機器一般會選擇執行緒終止
- 還有發生在虛擬機器試圖執行應用時,如類定義錯誤(NoClassDefFoundError)、連結錯誤(LinkageError)。這些錯誤是不可查的,因為它們在應用程式的控制和處理能力之外,而且絕大數是程式執行時不允許出現的狀況
Exception
-
在Exception分支中有一個重要的子類RuntimeException(執行時異常)
- ArrayIndexOutOfBoundException(陣列下標越界)
- NullPointerException(空指標異常)
- ArithmeticException(算術異常)
- MissingResourceException(丟失資源)
- ClassNotFoundException(找不到類)等
- 這些異常時不檢查異常,程式中可以選擇捕獲處理,也可以不處理
-
這些異常一般是由程式邏輯錯誤引起的,程式應該從邏輯角度儘可能避免這類異常的發生
-
Error和Exception的區別:Error通常時災難性的致命錯誤,是程式無法控制和處理的,當出現這些異常時,Java虛擬機器(JVM)一般會選擇終止執行緒;Exception通常情況下時可以被程式處理的,並且在程式中應該儘可能的去處理這些異常
異常處理機制
- 捕獲異常
public static void main(String[] args) {
//假設捕獲多個異常:從小到大
int a = 1;
int b = 0;
try{ //try監控區域
System.out.println(a/b);
}catch(ArithmeticException e){//catch(想要捕獲的異常型別)
System.out.println("程式出現異常,變數b不能為0");
} finally {
System.out.println("finally");
}
}
- 丟擲異常
package com.opp.demo02;
public class Demo01 {
public static void main(String[] args) {
new Demo01().test(1,0);
}
//假設方法中,處理不了這個異常。方法上丟擲
public void test(int a , int b)throws ArithmeticException{
if(b==0){//throw 丟擲異常
throw new ArithmeticException();//主動丟擲異常
}
}
}
自定義異常
-
使用者自定義異常類,只需要繼承Exception類即可
-
步驟:
- 建立自定義類
- 在方法中throw關鍵字丟擲異常物件
- 如果在當前方法丟擲異常的方法中處理異常,可以使用try-catch語句捕獲並處理,否則在方法的宣告處通過throws關鍵字指明要跑出給方法呼叫者的異常,繼續進行下一步操作
- 在出現異常方法的呼叫者中捕獲並處理異常
-
實際應用中的經驗總結:
- 處理執行時異常時,採用邏輯去合理規避同時輔助try-catch處理
- 在多重catch塊後面,可以加一個catch(Exception)來處理可能會被一遺漏的異常
- 對於不正確的程式碼,也可以加上try-catch,處理潛在異常
- 儘量去處理異常,切忌只是簡單的呼叫printStackTrace()去列印輸出
- 具體如何處理異常,要根據不同的業務需求和異常型別去決定
- 儘量新增finally語句塊去釋放佔用的資源