例外
程式的例外:Throwable
嚴重問題: Error
問題:Exception
編譯器問題:必須進行處理,如果不處理編譯就不能通過
運行期問題:RuntimeException
默認處理: jvm把例外名稱,原因以及出現問題等資訊輸出在控制臺
try...catch...finally處理例外: 注意try里面的代碼越少越好,catch能明確的例外盡量明確,評級關系的例外誰在前后無所謂父子關系父必須在后
throws拋出處理例外:拋出例外以便將來處理,不在mian方法上拋出例外
編譯時例外和運行是例外的區別:
編譯時例外:Java程式必須顯示處理,否則程式就會發生錯誤,無法通過編譯
運行期例外:無需顯示處理,也可以和編譯時例外一樣處理
在try里面發現問題后,jvm會幫我們生成一個例外物件,然后把這個物件拋出,和catch里面的類進行匹配,如果該物件是某個型別的,就會執行該catch里面的處理資訊
Throwable的常見方法:
public String getMessage(): 例外的訊息字串
public String toString(): 回傳此throwable的簡單描述,結果是以下字串的串聯:此物件的類的name;“: ”(冒號和一個空格);呼叫此物件getLocalizeMessage()方法的結果(默認回傳的是getMessage()的內容)
printStackTrace(): 獲取例外類名和例外資訊,以及例外出現在程式中的位置,回傳值void,把資訊輸出在控制臺,
throw:如果出現了例外情況,我們可以把該例外拋出,這個時候的拋出應該是例外的物件
throws和throw的區別:
throws用在方法宣告后面,跟得是例外類名;可以跟多個例外類名,用逗號隔開;表示拋出例外,由該方法的呼叫者來處理;throws表示出現例外的一種可能性,并不一定會發生這種例外
throw用在方法體內,跟的是例外物件名;只能拋出一個例外物件名;表示拋出例外,由方法體內的陳述句處理;throw則是拋出例外,執行throw則一定拋出了某種例外
finally: 被finally控制的陳述句體一定會執行,如果執行到finally之前jvm退出了,就不能執行了,作用:用于釋放資源,在IO流操作和資料庫操作中會見到,
final,finally和finalize()之間的區別
final:最終的意思,可以修飾類,成員變數,成員方法
修飾類,類不能被繼承
修飾變數,變數是常量
修飾方法,方法不能被重寫
finally:是例外處理的一部分,用于釋放資源
finalize:是Object類的一個方法,用于垃圾回收
如果catch里面由return陳述句,finally里面的代碼還會執行嗎?
會執行,在return前執行,準確的說,應該是在中間
自定義例外
繼承自Exception
繼承自runTimeException
為了實作自定義message,可以給自定義的例外類添加帶參構造方法,并使用super呼叫throwable的構造方法,
注意事項
A:子類重寫父類方法時,子類的方法必須拋出相同的例外或父類例外的子類,(父親壞了,兒子不能比父親更壞)
B:如果父類拋出了多個例外,子類重寫父類時,只能拋出相同的例外或者是他的子集,子類不能拋出父類沒有的例外
C:如果被重寫的方法沒有例外拋出,那么子類的方法絕對不可以拋出例外,如果子類方法內有例外發生,那么子類只能try,不能throws
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/172104.html
標籤:Java
