Error與Exception

引言

Error類和Exception類都繼承自Throwable類。
Error的繼承關係:
在這裏插入圖片描述
Exception的繼承關係:
在這裏插入圖片描述

異常發生的原因:

  • 用戶輸入了非法數據。
  • 要打開的文件不存在。
  • JVM內存溢出。

三種類型的異常

檢查性異常(CheckedException):最具代表的檢查性異常是用戶錯誤或問題引起的異常,這是程序員無法預見的。例如要打開一個不存在文件時,一個異常就發生了,這些異常在編譯時不能被簡單地忽略。

運行時異常(RuntimeException): 運行時異常是可能被程序員避免的異常。與檢查性異常相反,運行時異常可以在編譯時被忽略。

錯誤(Error): 錯誤不是異常,而是脫離程序員控制的問題。錯誤在代碼中通常被忽略。例如,當棧溢出時,一個錯誤就發生了,它們在編譯也檢查不到的。

常見的幾種RuntimeException如下:

NullPointerException - 空指針引用異常
FileNotFoundException - 文件未找到異常
SQLException - 操作數據庫異常
IOException - 輸入輸出異常
NoSuchMethodException - 方法未找到異常
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常
IndexOutOfBoundsException - 下標越界異常
NegativeArraySizeException - 創建一個大小爲負數的數組錯誤異常
NumberFormatException - 數字格式異常
SecurityException - 安全異常
UnsupportedOperationException - 不支持的操作異常

二者的不同之處:

Exception:
1.可以是可被控制(checked) 或不可控制的(unchecked)。
2.表示一個由程序員導致的錯誤。
3.應該在應用程序級被處理。
Error:
1.總是不可控制的(unchecked)。
2.經常用來用於表示系統錯誤或低層資源的錯誤。
3.如何可能的話,應該在系統級被捕捉。

Java 中定義了兩類異常:

  1. Checked exception: 這類異常都是Exception的子類 。異常的向上拋出機制進行處理,假如子類可能產生A異常,那麼在父類中也必須throws A異常。可能導致的問題:代碼效率低,耦合度過高。
  2. Unchecked exception: 這類異常都是RuntimeException的子類,雖然RuntimeException同樣也是Exception的子類,但是它們是非凡的,它們不能通過client code來試圖解決,所以稱爲Unchecked exception 。

Java 中異常類的繼承關係圖:

在這裏插入圖片描述

常見的異常面試題:

1、 try{} 裏有一個 return 語句,那麼緊跟在這個 try 後的 finally{} 裏的 code 會不會被執行,什麼時候被執行,在 return 前還是後?
:會執行,在方法返回調用者前執行。

2、Java語言如何進行異常處理,關鍵字:throws、throw、try、catch、finally分別如何使用?

:Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。
一般情況下是用try來執行一段程序,如果系統會拋出(throw)一個異常對象,可以通過它的類型來捕獲(catch)它,或通過總是執行代碼塊(finally)來處理;try用來指定一塊預防所有異常的程序;catch子句緊跟在try塊後面,用來指定你想要捕獲的異常的類型;throw語句用來明確地拋出一個異常;throws用來聲明一個方法可能拋出的各種異常(當然聲明異常時允許無病呻吟);finally爲確保一段代碼不管發生什麼異常狀況都要被執行;

3、運行時異常與受檢異常有何異同?

:運行時異常表示虛擬機的通常操作中可能遇到的異常,是一種常見運行錯誤,只要程序設計得沒有問題通常就不會發生。
受檢異常跟程序運行的上下文環境有關,即使程序設計無誤,仍然可能因使用的問題而引發。
Java編譯器要求方法必須聲明拋出可能發生的受檢異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。

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