異常
異常:異常就是Java程序在運行過程中出現的錯誤。
異常由來:問題也是現實生活中一個具體事務,也可以通過java 的類的形式進行描述,並封裝成對象。
其實就是Java對不正常情況進行描述后的對象體現。
Throwable
|--Error 嚴重問題,我們不處理。
|--Exception
|--RuntimeException 運行期異常,我們需要修正代碼
|--非RuntimeException 編譯期異常,必須處理的,否則程序編譯不通過
Exception和Error的子類名都是以父類名作為后綴。
Java中的異常被分為兩大類:編譯時異常和運行時異常。
所有的RuntimeException類及其子類的實例被稱為運行時異常,其他的異常就是編譯時異常
編譯時異常
•Java程序必須顯示處理,否則程序就會發生錯誤,無法通過編譯
運行時異常
•無需顯示處理,也可以和編譯時異常一樣處理
Throwable基本方法
getMessage()•獲取異常信息,返回字符串。toString()•獲取異常類名和異常信息,返回字符串。printStackTrace()•獲取異常類名和異常信息,以及異常出現在程序中的位置。返回值void。printStackTrace(PrintStream s)•通常用該方法將異常內容保存在日志文件中,以便查閱。
throws和throw
throws
•用在方法聲明后面,跟的是異常類名
•可以跟多個異常類名,用逗號隔開
•表示拋出異常,由該方法的調用者來處理
•throws表示出現異常的一種可能性,並不一定會發生這些異常
throw
•用在方法體內,跟的是異常對象名
•只能拋出一個異常對象名
•表示拋出異常,由方法體內的語句處理
•throw則是拋出了異常,執行throw則一定拋出了某種異常
異常處理過程
JVM的默認處理
把異常的名稱,原因,位置等信息輸出在控制台,但是程序不能繼續執行了。
自己處理
try...catch...finally
自己編寫處理代碼,后面的程序可以繼續執行
throws
把自己處理不了的,在方法上聲明,告訴調用者,這里有問題
try
{
需要檢測的代碼;
}
catch
(異常類 變量){
異常處理代碼;
}
finally
{
一定會執行的代碼;
}
Finally代碼塊控制的語句體一定會執行
只有一種情況不會被執行。就是在之前執行了System.exit(0)。
主要用於釋放資源
常見變形形式
try...catch...finally
try...catch...
try...catch...catch...
try...catch...catch...fianlly
try...finally
自定義異常
自定義類繼承Exception或者其子類,只需要提供無參構造和一個帶參構造即可
通過構造函數定義異常信息。
例:
Class DemoException extends Exception { DemoException(String message) { super(message); } }
通過throw將自定義異常拋出。
RuntimeException以及其子類如果在函數中被throw拋出,可以不用在函數上聲明。
1.父的方法有異常拋出,子的重寫方法在拋出異常的時候必須要小於等於父的異常,也就是必須拋出相同的異常或異常的子類
2.父的方法沒有異常拋出,子的重寫方法不能有異常拋出,如果子類方法內有異常發生,那么子類只能try,不能throws
3.父的方法拋出多個異常,子的重寫方法必須比父少或者小,不能拋出新的異常