什麼是異常
比如上午我們一般是開車去上班,正常情況下,一般都不會遲到,但是今天突然有個問題,車壞了或者限行了,於是乎你改坐公交了,就有可能會遲到,這就屬於一種異常的情況。在實際生活中呢,可能會遇到很多很多的不測,天有不測風雲,那就是這樣的。
實際工作中,遇到的情況不可能是非常完美的。比如:你寫的某個模塊,你要輸入一個字符串,他輸入了一個漢字,用戶輸入不一定符合你的要求、你的程序文件要打開某個文件,這個文件可能不存在或者文件格式不對,你要讀取數據庫的數據,數據可能是空的等。我們的程序在跑著,內存或者硬盤可能滿了。等等
軟件程序在運行過程中,非常可能遇到剛剛提到的這些異常問題,我們叫做異常,英文是: Exception , 意思是例外。
這些,例外情況,或者叫異常,怎麼讓我們寫的程序做出一些合理的處理,不至於程序崩 潰。
java.lang.StackOverflowError:
<code> 1 package com.exception;
2
3 public class Demo01 {
4 public static void main(String[] args) {
5
6 }
7
8 //遞歸沒有出口死循環 棧溢出錯誤java.lang.StackOverflowError,一般不要這麼寫
9 public void a() {
10 b();
11 }
12
13 public void b() {
14 a();
15 }
16 }
/<code>
java.lang.ArithmeticException:/ by zero
<code> 1 package com.exception;
2
3 public class Demo01 {
4 public static void main(String[] args) {
5
6 //java.lang.ArithmeticException:/ by zero
7 System.out.println(11 / 0);
8 }
9
10 }
/<code>
Error: ;少分號
<code>1 package com.exception;
2
3 public class Demo01 {
4 public static void main(String[] args) {
5 //Error: ;
6 System.out.println()
7 }
8
9 }
/<code>
異常指程序運行中出現的不期而至的各種情況,如:文件找不到、網絡連接失敗、非法參數等
異常發生在程序運行期間,它影響了正常的程序執行流程。
簡單分類
- 要理解Java異常處理是如何工作的,你需要掌握以下三種類型的異常:
- 檢查性異常:最具代表的檢查性異常是用戶錯誤或問題引起的異常,這是程序員無法預見的,例如要打開一個不存在的文件時,一個異常就發生了,這些異常在編譯時不能被簡單地忽略。
- 運行時異常:運行時異常是可能被程序員避免的異常。與檢查性異常相反,運行時異常可以在編譯是被忽略。
- 錯誤 Error :錯誤不是異常,而是脫離程序員控制的問題。錯誤在代碼中通常被忽略。例如,當棧溢出時,一個錯誤就發生了,它們在編譯也檢查不到的。
異常體系結構
Java把異常處理當作對象來處理,並定義一個基類java.lang.Throwable作為所有異常的超類
在JavaAPI中已經定義了許多異常類,這些異常類分為兩大類,錯誤 Error 和異常 Exception, Error無法預見,Exception通常是可以預料到的事情。
Error
Error是由Java虛擬機生成並拋出,大多數錯誤與代碼編寫者所執行的操作無關
Java虛擬機運行錯誤(Virtual MachineError),當JVM不再有繼續執行操作所
需的內存資源時,將出現 OutOfMemoryError。 這些異常發生時,Java虛擬機(JVM)一般會選擇線程終止;
還有發生在虛擬機試圖執行應用時,如類定義錯誤(NoClassDefFoundError)鏈接錯誤(LinkageError)。這些錯誤是不可查的,因為它們在應用程序的控制能力之 外,而且絕大多數是程序運行時不允許出現的狀況。
Exception
在Exception分支中有一個重要的子類RuntimeException(運行時異常)
- ArraryIndexOutOfBoundsException(數組下標越界異常)
- NullPointerException(空指針異常)
- ArithmeticException(算數異常)
- MissingResourceException(丟失資源)
- ClassNotFoundEcxeption(找不到類)等異常,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以選擇不處理。
這些異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度儘可能避免這兩在異常的發生;
Error和Exception的區別:
Error通常是災難性的致命的錯誤,是程序無法控制和處理的,當出現這些異常時,Java虛擬機(JVM)一般會選擇終止線程;Exception通常情況下是可以被程序處理的,並且在程序中應該儘可能的去處理這些異常。
閱讀更多 sandag 的文章