知己知彼方能百戰不殆,在小編初學Java時候特別怕程序報異常,經常會因爲異常不知所措,相信這個問題應該是所有
初學者都會有的心理感受;如果你也有這種感受,那麼只有一種解決方法:
迎難而上,攻克Java異常體系,長痛不如短痛,只要清楚了Java的異常體系,就不會再有這種感受了。下面跟着小編來窺探Java的異常體系吧。
一、Java異常體系其實很簡單
其實Java的異常體系是非常簡單的,簡單到只要你看過本文就能明白百分之八九十的樣子。當你清楚了Java的異常體系
那麼在遇到項目執行異常的時候,基本看報錯的異常就大概明白問題出在哪裏,遇到的錯誤多了,就成長了,處理的問題就是
你未來在技術路上所積累的財富。
在Java的異常體系中 Throwable
我們可以理解爲是一個根異常,即所有的異常都是它的子類
二、Error
前面我們說了Java的異常體系中 Throwable
可以理解是一個根異常,那麼 Error
就是這個根節點的一個子節點。
Error
類對象由 Java
虛擬機生成並拋出,大多數錯誤與代碼編寫者所執行的操作無關。程序無法處理的異常,一般伴隨者jvm虛擬機停止,或者斷電之類
這種問題,是無法通過程序來解決的。
這種異常基本很少,如果遇到也不要慌,跟你的業務邏輯沒有關係,頂多是Java代碼寫的有問題,只要不是業務問題其實大多都能先通過重啓解決;
但是假如項目還未上線,只是在開發過程中出現這種問題一定要弄清楚原因,是那一部分代碼編寫異常導致的,否則上線可能有重大隱患
經驗教學:
- 如果是在項目系統過程中遇到這種問題,可能是因爲Jar包衝突導致的。
- 如果是在項目運行過程中遇到這種問題,可能是因爲對象創建過多沒有釋放,導致堆棧溢出。這個時候就要看GC是否頻繁,然後對堆棧日誌進行分析,看存在最多的對象是哪一個,然後分析代碼解決。
三、Exception
Exception
異常時我們平時在開發中遇到最多,其實 Exception
也分爲兩種即:
checkException
編譯異常,這種異常,是哪些沒有遵守java語言規則,容易看出和解決的uncheckException
運行異常,運行異常,具有不確定性,往往難以排查,包括處理邏輯問題。
然而 checkException
和 uncheckException
其實只是一個概念,並沒有對應的 Java異常類
。我們基本可以忽略
checkException
因爲這種異常基本現在的編譯器都會給我們做了,我們在寫代碼時候就會實時的給我提示錯誤了。我們
只用關心 uncheckException
即可。
uncheckException
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-VD2oAGuZ-1589382801951)(https://img.springlearn.cn/blog/learn_1589297073000.png)]
RuntimeException
+ Error
和其子類都是屬於 uncheckException
前面我們已經對 Error
做了說明,現在就主要來看下 RuntimeException
。 RuntimeException
從名字來看就是
運行異常,所謂運行異常就是可能在程序運行過程中發生的異常,這種異常一般是可以通過代碼邏輯進行處理的。
我們舉例一個例子,我們都知道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/)