Java 異常處理7
發表時間:2024-05-23 來源:明輝站整理相關軟件相關文章人氣:
[摘要]有爭議性的未被檢查的異常 因為Java編程語言不要求方法一定要捕獲或列出運行異常或錯誤,所以程序員就可能被誤導,編寫只拋出運行時異常或者使所有的異常子類都繼承于RuntimException的代碼,這兩種快捷方式允許程序員編寫不用為編譯錯誤而操心的代碼,并且也不費神去指定或捕獲任何異常。盡管這...
有爭議性的未被檢查的異常
因為Java編程語言不要求方法一定要捕獲或列出運行異常或錯誤,所以程序員就可能被誤導,編寫只拋出運行時異常或者使所有的異常子類都繼承于RuntimException的代碼,這兩種快捷方式允許程序員編寫不用為編譯錯誤而操心的代碼,并且也不費神去指定或捕獲任何異常。盡管這種方法看上去對程序員很方便,但它回避了捕獲或指定必要的東西的意圖,并且可能使使用你的類的程序員發生錯誤。
為什么設計者決定強制一個方法指定所有的在它的范圍內可能被拋出的未檢查異常呢?被一個方法拋出的任何異常都是方法公共編程接口的一部分。方法的調用者必須知道有關這個方法所拋出的異常,以便他們能夠針對這些異常決定做什么。這些異常是編寫方法的接口差不多,有它們的參數和返回值。
接下來你的問題可能是:如果它是這么好的說明了一個方法的API,包括它能拋出的異常,那么為什么不也指定運行時異常呢?運行時異常描述的問題是一個設計問題的結果,并且,API的客戶代碼不能期望從出錯的地方來恢復程序執行或用一些方法來處理它們。這些問題包括算法異常(例如被零除),指針異常(例如通過一個空的引用來訪問一個對象),以及索引異常(例如試圖通過一個越界的索引來訪問一個數組)。運行時異常可能在程序的任何地方發生,并且在一個典型的程序中可能有很多,因此,在每個方法中不得不添加運行異常來降低程序的透明度,這樣,編譯器不要求你指定或捕獲運行時異常(盡管你可以)。
拋出運行時異常(RuntimeException)的一個公共案例就是在用戶調用了一個錯誤的方法的時候。例如,一個方法檢查它的參數是否有效,如果一個參數是空(null),那么這個方法就可能拋出一個NullPointerException異常,這是一個不檢查異常。
一般來說,不拋出運行時異常(RuntimeException)或不創建一個運行時異常(RuntimeException)的子類的原因是:人你不想為指定你的方法所能拋出的異常而操心。
一個使用異常的方針是:如果客戶能夠被期望從一個異常中得到恢復,那么就要使用檢查性異常。如果一個客戶對于從異常中恢復的程序不能做任何事,那么就可以使用不檢查性異常。