文章出處

1.如果方法聲明名里面有throws異常,那么方法體里面可以不拋出異常。因為可以在方法聲明中包含異常說明,但實際上卻不拋出!這樣做的好處是,為異常先占個位置,以后就可以拋出這種異常而不用修改修改已有的代碼。在定義抽象基類和接口時這種能力很重要,這樣派生類或接口實現類就能夠拋出這些預先聲明的異常。

2.為什么有的方法聲明里面沒有throws,但方法體里面卻拋出了異常?從RuntimeException繼承的異常,可以在沒有異常說明throws的情況下被拋出!對于Runtime異常(也稱為非檢查的異常unchecked exception),編譯器不需要異常說明。只能在代碼中忽略RuntimeException(及其子類)類型的異常,其他類型的異常的處理都是由編譯器強制實施的。究其原因,RuntimeException代表的是編程錯誤。

3.運行時異常會被Java虛擬機自動拋出!

 

1. 異常處理基礎
     1.1 System.out.println是高代價的。調用System.out.println會降低系統吞吐量。
 
     1.2 在生產環境中別用異常的printStackTrace()方法。printStackTrace默認會把調用的堆棧打印到控制臺上,在生產環境中訪問控制臺是不現實的。
 
2. 異常處理基本原則
     2.1 如果你不能處理異常,不要捕獲該異常。
 
     2.2 如果要捕獲,應在離異常源近的地方捕獲它。
 
     2.3 不要吞沒你捕獲的異常。
     *(就是捕獲的異常,但是什么也不做)
 
     2.4 除非你要重新拋出異常,否則把它log起來。
 
     2.5 當一個異常被重新包裝,然后重新拋出的時候,不要打印statck trace。
 
     2.6 用自定義的異常類,不要每次需要拋出異常的時候都拋出java.lang.Exception。方法的調用者可以通過throws知道有哪些異常需要處理--所以它是自我描述的。
 
     2.7 如果你編寫業務邏輯,對于終端用戶無法修復的錯誤,系統應該拋出非檢查的異常(unchecked exception);如果你編寫一個第三方的包給其他的開發人員用,對于不可修復的錯誤要用需要檢查的異常(checked exception)。
 
    2.8 絕對不要因為寫throws語句會讓你用起來不舒服,而不聲明需要檢查的異常。
 
    2.9 應用級別的錯誤或不可修復的系統異常用非檢查的異常(unchecked exception)拋出。
    *(注意是錯誤,意味著不可修復,比如配置文件錯誤)
 
    2.10 根據異常的粒度組織你的方法
 
《有效處理Java異常三原則》http://www.importnew.com/1701.html

 

其他參考文章:

http://klyuan.iteye.com/blog/72170

http://blog.csdn.net/luqin1988/article/details/7970792

http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html  對應的譯文,不怎么準確:http://blog.sciencenet.cn/blog-252888-761119.html

http://www.oschina.net/question/92866_15634 

http://www.importnew.com/1701.html

http://sunflowers.iteye.com/blog/767175


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()