1. 程式人生 > 其它 >javaSE 筆記 異常 + try...catch... + throws/throw + 自定義異常

javaSE 筆記 異常 + try...catch... + throws/throw + 自定義異常

異常

異常體系的超類是Throwable,下面有Error類和Exception類,Error類屬於嚴重問題,不需要處理,Exception類屬於異常類,
它表示程式本身可以處理的類。Exception類下面又有兩個類,分別為RuntimeException類和非RunTimeException類,,前者
在編譯期不檢查,後者在編譯期就得處理。

異常處理之try...catch...格式:

try{
    可能出現的程式碼;
} catch(異常類名 變數名){
    異常的處理程式碼;
}

程式從try開始執行,出現異常,會自動生成異常類物件(相當於new 了一個物件),被提交給java執行時系統,再去catch中匹配異常類,
找到後進行異常處理,處理完再繼續執行。注意:自己寫了異常處理程式碼後,能夠繼續執行,不然程式會停止。異常處理可以用
printStackTrace()方法來處理,雖然在控制檯輸出的東西是差不多的,但是這樣我的程式能夠繼續執行。

Throwable成員方法

有getMessage,toString,printStackTrace方法,最後一個資訊最全最常用。

編譯時異常和執行時異常

編譯時異常:必須顯示處理,否則程式會發生錯誤,無法通過編譯.也就是利用try...catch...來處理,比如當用到SimpleDataFormat
類中的parse方法時,就會提示有一個未處理的異常ParseException,那就得在catch的()裡新增這個異常類的物件

執行時異常:無需顯示處理,也可以跟編譯時異常一起處理,顯示處理指的是自己寫個try...catch...
需要注意的是,編譯時異常不一定就會出錯,可能出錯,也可能不出錯。比如給了一個日期的字串,如果與給定日期格式不匹配會報錯
,更多的得積攢更多案例了。

異常處理之throws

try...catch...可以處理一些異常,但是不是所有情況我們都有許可權進行異常處理。如果出現,java提供了throws處理方案,針對編譯
時和執行時,throws 異常類名;這個格式是跟在方法的括號後面的。

  • 編譯時異常必須要處理,要麼try..catch..,要麼throws(誰來呼叫誰處理,在呼叫的地方進行try...catch...)
  • 執行時異常可以不處理,出現問題後,再修改程式碼。
    注意:throws只是丟擲異常,推遲異常處理的時間,並沒有真正地解決異常。

自定義異常

1.自定義一個異常類,只需要定義一個繼承自Exception或者RuntimeExceptions的類即可,並提供個無參構造,有參構造即可。
2.在類的方法內部用throw丟擲異常物件的時候,需要在類名()後面加上throws 異常類名。不過前面的做法是基於異常類繼承自
Exception類的時候,即編譯時異常。如果繼承自RuntimeExceptions,後面加不加throws都一樣。現在還不知道為什麼。。。


3.在測試類呼叫方法體中會丟擲異常的類的方法時,編譯時異常必須顯示處理,即用try...catch...
throws 和 throw的區別:

throws throw
用在方法聲明後面,跟的是異常類名 用在方法體內,跟的是異常物件名
表示丟擲異常,由該方法的呼叫者來處理 表示丟擲異常,由方法體內的語句處理
表現出現異常的一種可能性,並不一定真會異常 執行throw一定丟擲了某種異常

注意throw跟的物件名可以用new 。。。就是匿名物件,更方便。