1:異常
(1)程序出現的不正常的情況。
(2)異常的體系
Throwable:
getMessage()
toString()
printStacktrace()
printStacktrace(PrintStream ps)
|--Error 嚴重問題,我們不處理。
|--Exception
|--RuntimeException 運行時異常,我們需要修正代碼
|--非RuntimeException 編譯期異常,必須處理的,否則程序編譯不通過
(3)異常的處理:
A:JVM的默認處理
異常發生的線程,把異常的名稱,原因,位置等信息輸出在控制檯,但是呢程序不能繼續執行了。
B:自己處理
a:try...catch...finally
自己編寫處理代碼,後面的程序可以繼續執行
b:throws
把自己處理不了的,在方法上聲明,告訴調用者,這裏可能有問題
(4)面試題
A:編譯期異常和運行期異常的區別?
編譯期異常 必須顯示處理的,否則編譯不通過
運行期異常 可以不處理,也可以處理
B:throw和throws是的區別
throw:
在方法體中,後面跟的是異常對象,並且只能是一個
throw拋出的是一個異常對象,說明這裏肯定有一個異常產生了
throws:
在方法聲明上,後面跟的是異常的類名,可以是多個
throws是聲明方法有異常,是一種可能性,這個異常並不一定會產生
(5)finally關鍵字及其面試題
A:finally用於釋放資源,它裏面的代碼無論異常是否發生,都會被執行。特殊情況:在執行到finally之前jvm退出了。System.exit(0)
B:面試題
a:final,finally,finalize的區別?
b:如果在catch裏面有return,請問finally還執行嗎?如果執行,在return前還是後。
會。中間。
C:try...catch的變形
try...catch...finally
try...catch...
try...catch...catch...
try...catch...catch...fianlly
try...finally
(6)自定義異常
繼承自Exception或者RuntimeException,只需要提供無參構造和一個帶參構造即可.
(7)異常的注意事項(編譯期異常)
A:父的方法有異常拋出,子的重寫方法在拋出異常的時候必須要小於等於父的異常
B:父的方法沒有異常拋出,子的重寫方法不能有異常拋出
C:父的方法拋出多個異常,子的重寫方法必須比父少或者小
結論:兒子不能比父親更壞。