1. 程式人生 > 實用技巧 >Exception 和Error異常大部分人都犯過的錯。

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)異常。

我是【爾東雙月】一枚執著的職場程式設計師,微信搜尋【程式職場】關注我。別忘了三連啊,點贊、收藏、留言,隨意給,我不挑。
注:如果文章有任何問題,歡迎毫不留情地指正。