Java異常
在Java中,一個異常物件總是Throwable子類別的實例。
Error類別體系描述了Java運行系統中的內部錯誤以及資源耗盡的情況。
由程式設計導致的錯誤,會導致RuntimeException異常。而其他錯誤原因所導致的異常----例如,因為I/O錯誤導致的曾經執行正確的程式出錯,都不會導致RuntimeException異常。
從RuntimeException衍生出來的例外包括下面的問題:1〉錯誤的型別轉換;2〉陣列越界存取;3〉試圖存取一個空指標。
不是從RuntimeException衍生出來的例外包括:
1〉試圖從檔案尾後面讀取資料;
2〉試圖開啟一個錯誤格式的URL;
3〉試圖用字串來建構一個Class對象,而當字串對應的類別並不存在;
處理RuntimeException的原則是:如果出現RuntimeException,則一定是你的錯誤;
不同的瀏覽器可以處理不同類型的URL,所以,URL格式是否錯誤依賴於特定的環境,而不僅僅是程式碼;
Java語言規格中將任何Error的子類別以及RuntimeException的子類別都稱為未檢查異常,而其他的異常則稱為已檢查異常;
僅在以下4種情況下,才會拋出異常:
1〉呼叫了一個會拋出"已檢查異常"的方法,例如BufferReader類別的readLine方法;
2〉程式運行過程中發生了錯誤,並且用throw語句拋出一個"已檢查異常";
3〉程式錯誤,例如a[-1]=0會拋出一個"未檢查異常"如數組下標越界(ArrayIndex--OutOfBoundsException);
4〉Java虛擬機器或執行時函式庫出現了內部錯誤;
不需要宣告Java的內部錯誤。一個方法必須聲明它可能拋出的全部"已檢查異常"。如果在自己的子類別中覆寫了一個來自父類別的方法。特別要注意的是,如果父類別方法根本沒有拋出任何"已檢查異常",則子類別也只能如此;
在Java中,沒有throws指示符的方法是不能拋出任何已檢查Java異常的;
對於try/catch程式碼區塊,如果方法內的任何程式碼拋出了一個異常,同時它的類型沒有在catch中指定,則方法會立即退出;
應捕捉並且處理那些已知如何處理的異常(用catch),而傳遞那些不知如何處理的異常(用throws);
對於try/catch/finally代碼塊,無論是否捕獲異常,都會執行finally從句中的程式碼;
雖然Java程式設計師必須在finally從句中人工設定程式碼來回收資源,但由於Java內建有"垃圾收集"機制,所以只有極少數的資源才要求人工進行回收;
actionPerformed方法不能拋出任何已檢查異常;
#使用Java異常機制的一些技巧:
1〉異常控制不能代替簡單的測試,和執行簡單的測試相比,捕捉異常所需的時間大大超過前者,所以,只有在異常情況下才使用異常;
2〉不要過分細化異常;
3〉不要壓制異常:可以使用如下格式: try { //程式碼} catch (Exception e) { //空}
4〉不要羞於傳遞異常:對於某些異常(如呼叫FileInputStream構造器或readLine方法產生的異常),傳遞它比捕捉它更好。讓高層的方法來通知使用者發生了錯誤或放棄執行不成功的命令更合適。
Java斷言
預設情況下,Java斷言是關閉的。可透過-ea來打開,用-da來關閉。選項-ea:...會開啟預設套件中全部類別的斷言功能,開啟或關閉斷言是類別裝載器的功能;
-da和-ea選項對那些沒有類別載入器的」系統類"是不起作用的。對於這些系統類,要使用-enablesystemassertions/-esa選項來開啟斷言功能;
Java斷言使用技巧:
1>斷言失敗是致命的,不可恢復的錯誤;
2>斷言檢查僅用在程式開發和測試階段;
因此,不應該用斷言作為訊號來通知程式的另外部分發生了可恢復錯誤,或者將斷言作為通知程式使用者的方式。 Java斷言僅僅應該在測試階段用來定位程式內部錯誤;
Java斷言是在測試和偵錯階段使用的工具,而日誌是在程式整個生命週期中都使用的策略性工具。
下面是think in java中的一段
違例準則
用違例做下面這些事情:
(1)解決問題並再次呼叫造成違例的方法。
(2) 平息事態的發展,並在不重新嘗試方法的前提下繼續。
(3) 計算另一些結果,而不是希望方法產生的結果。
(4) 在當前環境中盡可能解決問題,並將相同的違例重新「擲」出更進階的環境。
(5) 在目前環境中盡可能解決問題,以及將不同的違例重新「擲」出更進階的環境。
(6) 中止程序執行。
(7) 簡化編碼。若違例方案使事情變得更加複雜,那就會令人非常煩惱,不如不用。
(8) 讓自己的函式庫和程式變得更安全。這既是一種「短期投資」(便於調試),也是一種「長期投資」(改善應用程式的健壯性)
以上是Java異常和斷言如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!