java的異常處理基礎與基本原則

來源:互聯網
上載者:User

今天在看hadoop源碼時,想想自己最近在做的那個系統,發現很多異常處理的方式不對,還是按照傳統的異常處理方式(即:採用傳回值來標識程式出現的異常情況)。而hadoop中很多方法的聲明是有異常拋出的,而我的系統中的很多方法的聲明都沒有拋出異常。只是判斷了異常情況,並輸出了錯誤提示,但是並沒有拋出異常。

org.apache.hadoop.hdfs.protocol包下的Block類的readFields()方法:

public void readFields(DataInput in) throws IOException {    this.blockId = in.readLong();    this.numBytes = in.readLong();    this.generationStamp = in.readLong();    if (numBytes < 0) {      throw new IOException("Unexpected block size: " + numBytes);//拋出異常,要是的話就不會拋出,而只是System.out.println錯誤提示,    }

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 根據異常的粒度組織你的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.