Exception 和Error異常大部分人都犯過的錯。
先看再點贊,給自己一點思考的時間,如果對自己有幫助,微信搜尋【程式職場】關注這個執著的職場程式設計師。
我有什麼:職場規劃指導,技能提升方法,講不完的職場故事,個人成長經驗。
1,簡介
Exception 和Error 都是繼承了Throwable類,在Java中只有Throwable型別的例項才可以被丟擲或者捕獲,它是異常處理機制的基本型別。
兩者有什麼區別呢:
Exception是java程式執行中可預料的異常情況,咱們可以獲取到這種異常,並且對這種異常進行業務外的處理。(我們常做的操作就是捕獲這種異常或者丟擲這種異常)
Error是java程式執行中不可預料的異常情況,這種異常發生以後,會直接導致JVM不可處理或者不可恢復的情況。所以這種異常不可能抓取到,比如OutOfMemoryError、NoClassDefFoundError等。(這種會導致我們的程式 crash,直接導致專案的崩潰)
2,子類
我們來看看這兩個異常都有哪些子類呢?
1,Exception
(1)RuntimeException
(2)NullPointerException
(3)ClassCaseException
(4)SecurityException
(5)IOException
2,Error
(1)OutofMemoryError
(2)StackOverFlowError
(3)VirtualMachineError
(4)LinkageError
(5)NoClasDeffoundError
(6)ExceptionInInitializerError
我們上面知道了兩個都包含了哪些子類,同事我們剛開始的時候也說了
Exception 和Error 都是繼承了Throwable類
3,Throwable
我們必須要理解 Java 語言中操作 Throwable 的元素並且知道怎麼使用。
掌握最基本的語法是必須的,如 try-catch-finally 塊,throw、throws 關鍵字等。
還要懂得如何處理典型場景。
throw是存在於方法的程式碼塊中,而throws是存在於方法外圍,一般是在方法名後邊 throws XXXException;
我們先來看看的使用try-catch-finally,一般我們害怕出現異常都是直接try-catch-finally 新增,但是這種異常捕獲,是有先後順序的,下面我們通過兩個例項來說說明
try{
retrun 3;
}catch{
e.printStackTrace();
}finally{
return 4;
}
//上邊情況下,實際返回的是4;
try{
int x = 3;
retrun x;
}catch{
e.printStackTrace();
}finally{
x++;
}
//上邊情況下,實際返回的3;
是不是發現finally是都要走了,所以一般我們處理異常的東西,最後消除或者釋放的時候都需要在finally中。
1,捕獲異常
捕獲異常就是我們直接處理掉異常,讓異常到這裡就結束。如下例:
package com.company.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
public class Exception_Error {
public static void main(String[] args) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
}
}
}
2,丟擲異常
package com.company.test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
public class Exception_Error {
public static void main(String[] args) {
try{
throwChecked(3);
}catch(Exception e) {
System.out.println(e.getMessage());
}
throwRuntime(-3);
}
//該方法內丟擲一個Exception異常物件,必須捕獲或拋給呼叫者
public static void throwChecked(int a) throws Exception {
if(a < 0) {
throw new Exception("a的值應大於0,不符合要求");
}
}
//該方法內丟擲一個RuntimeException物件,可以不理會直接交給JVM處理
public static void throwRuntime(int a) {
if(a < 0) {
throw new RuntimeException("a的值應大於0,不符合要求");
}
}
}
throw語句用在方法體內,表示丟擲異常,由方法體內的語句處理
throw是具體向外拋異常的動作,所以它是丟擲一個異常例項。
throw要麼和try-catch-finally語句配套使用,要麼與throws配套使用
如果丟擲的是RuntimeException則既可以顯示使用try…catch捕獲也可以不理會它
3,異常處理的兩大基本原則
-
儘量不要捕獲類似 Exception 這樣的通用異常,而是應該捕獲特定異常。
-
不要生吞(swallow)異常。
我是【爾東雙月】一枚執著的職場程式設計師,微信搜尋【程式職場】關注我。別忘了三連啊,點贊、收藏、留言,隨意給,我不挑。
注:如果文章有任何問題,歡迎毫不留情地指正。