程序員快速弄清Java異常體系,拒絕痛苦編程,開發效率加倍

知己知彼方能百戰不殆,在小編初學Java時候特別怕程序報異常,經常會因爲異常不知所措,相信這個問題應該是所有
初學者都會有的心理感受;如果你也有這種感受,那麼只有一種解決方法:
迎難而上,攻克Java異常體系,長痛不如短痛,只要清楚了Java的異常體系,就不會再有這種感受了。下面跟着小編來窺探Java的異常體系吧。

一、Java異常體系其實很簡單

其實Java的異常體系是非常簡單的,簡單到只要你看過本文就能明白百分之八九十的樣子。當你清楚了Java的異常體系
那麼在遇到項目執行異常的時候,基本看報錯的異常就大概明白問題出在哪裏,遇到的錯誤多了,就成長了,處理的問題就是
你未來在技術路上所積累的財富。

在Java的異常體系中 Throwable 我們可以理解爲是一個根異常,即所有的異常都是它的子類

二、Error

前面我們說了Java的異常體系中 Throwable 可以理解是一個根異常,那麼 Error 就是這個根節點的一個子節點。
Error 類對象由 Java 虛擬機生成並拋出,大多數錯誤與代碼編寫者所執行的操作無關。程序無法處理的異常,一般伴隨者jvm虛擬機停止,或者斷電之類
這種問題,是無法通過程序來解決的。

這種異常基本很少,如果遇到也不要慌,跟你的業務邏輯沒有關係,頂多是Java代碼寫的有問題,只要不是業務問題其實大多都能先通過重啓解決;
但是假如項目還未上線,只是在開發過程中出現這種問題一定要弄清楚原因,是那一部分代碼編寫異常導致的,否則上線可能有重大隱患

經驗教學:

  1. 如果是在項目系統過程中遇到這種問題,可能是因爲Jar包衝突導致的。
  2. 如果是在項目運行過程中遇到這種問題,可能是因爲對象創建過多沒有釋放,導致堆棧溢出。這個時候就要看GC是否頻繁,然後對堆棧日誌進行分析,看存在最多的對象是哪一個,然後分析代碼解決。

三、Exception

Exception 異常時我們平時在開發中遇到最多,其實 Exception 也分爲兩種即:

  1. checkException 編譯異常,這種異常,是哪些沒有遵守java語言規則,容易看出和解決的
  2. uncheckException 運行異常,運行異常,具有不確定性,往往難以排查,包括處理邏輯問題。

然而 checkExceptionuncheckException 其實只是一個概念,並沒有對應的 Java異常類。我們基本可以忽略
checkException 因爲這種異常基本現在的編譯器都會給我們做了,我們在寫代碼時候就會實時的給我提示錯誤了。我們
只用關心 uncheckException即可。

uncheckException

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VD2oAGuZ-1589382801951)(https://img.springlearn.cn/blog/learn_1589297073000.png)]

RuntimeException + Error 和其子類都是屬於 uncheckException

前面我們已經對 Error 做了說明,現在就主要來看下 RuntimeExceptionRuntimeException 從名字來看就是
運行異常,所謂運行異常就是可能在程序運行過程中發生的異常,這種異常一般是可以通過代碼邏輯進行處理的。
我們舉例一個例子,我們都知道0不能作爲除數。但是假如在下面這個代碼中

public class Tester {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("請輸入被除數a:");
        int a = sc.nextInt();
        System.out.print("請輸入除數b:");
        int b = sc.nextInt();
        System.out.println("a/b=" + a / b);
    }
}

當輸入a=8,b=2,那麼結果就是4。

假如我們輸入b=0呢?

學過數學都知道0不能做除數,程序也不運行你這麼輸入,但是卻不能阻止你,只能通過報錯的方式來告訴你。

那麼我們就要對這個異常進行處理,當發現有這個異常就在控制檯來提醒用戶。那麼代碼就會變成這樣

public class Tester {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("請輸入被除數a:");
        int a = sc.nextInt();
        System.out.print("請輸入除數b:");
        int b = sc.nextInt();
        try {
            System.out.println("a/b=" + a / b);
        } catch (ArithmeticException ate) {
            //對算術異常進行捕捉
            System.err.println("0不能作爲除數,請輸入不爲0的任意數");
        }
    }
}

當出現算術異常直接提示: “0不能作爲除數,請輸入不爲0的任意數”

那麼像這種程序中無可避免會出現,且又能通過邏輯來處理的異常就是運行異常。運行異常一般都可以正常運行,只是在特定情況下會導致異常發生。
像這面這個例子,我們只要看到 ArithmeticException 就知道是算術異常。所以只要我們對運行異常類有一個認識,其實就能解決大多數的程序問題了。
下面我們來看下運行異常都要有哪些類把。

只要對下面運行異常類進行熟悉了,基本就清楚掌握了Java的異常體系了

以上就是常見的運行異常類,當然Java中還有很多不常見的異常類。剩下的我們就可以在日常工作中去學習了。

感謝您的閱讀,本文由 程序猿升級課 版權所有。如若轉載,請註明出處:程序猿升級課(https://blog.springlearn.cn/)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章