Java異常:選擇Checked Exception還是Unchecked Exception?

來源:互聯網
上載者:User
  分類: Java(35) 

目錄(?)[+]

Java包含兩種異常:checked異常unchecked異常。C#只有unchecked異常。checked和unchecked異常之間的區別是:

Checked異常必須被顯式地捕獲或者傳遞,如Basic try-catch-finally Exception Handling一文中所說。而unchecked異常則可以不必捕獲或拋出。 Checked異常繼承java.lang.Exception類。Unchecked異常繼承自java.lang.RuntimeException類。

有許多支援或者反對二者甚至是否應該使用checked異常的爭論。本文將討論一些常見的觀點。開始之前,先澄清一個問題:

Checked和unchecked異常從功能的角度來講是等價的。可以用checked異常實現的功能必然也可以用unchecked異常實現,反之亦然。

選擇checked異常還是unchecked異常是個人習慣或者組織規定問題。並不存在誰比誰強大的問題。 一個簡單的例子

在討論checked和unchecked異常的優缺點前先看一下代碼中如下使用它們。下面是一個拋出checked異常的方法,另一個方法調用了它:

[java]  view plain  copy public void storeDataFromUrl(String url){       try {           String data = readDataFromUrl(url);       } catch (BadUrlException e) {           e.printStackTrace();       }   }      public String readDataFromUrl(String url)   throws BadUrlException{       if(isUrlBad(url)){           throw new BadUrlException("Bad URL: " + url);       }          String data = null;       //read lots of data over HTTP and return       //it as a String instance.          return data;   }   readDataFromUrl()方法拋出了BadUrlException。BadUrlException是我自己實現的一個類。由於BadUrlException繼承自java.lang.Exception,因而它是checked異常:

[java]  view plain  copy public class BadUrlException extends Exception {       public BadUrlException(String s) {           super(s);       }   }   如果storeDataFromUrl()方法想要調用readDataFromUrl(),它只有兩種選擇。要麼捕獲BadUrlException,要麼沿著調用棧繼續向上傳播該異常。上面的代碼中storeDataFromUrl() 捕獲了異常。向上傳播異常的實現方法如下:

[java]  view plain  copy public void storeDataFromUrl(String url)   throws BadUrlException{       String data = readDataFromUrl(url);   }   可以看到,上述代碼去掉了catch塊,方法聲明中加上了throws BadUrlException。下面,討論一下unchecked異常的實現方法。首先,將BadUrlException改為繼承自java.lang.RuntimeException:

[java]  view plain  copy public class BadUrlException extends RuntimeException {       public BadUrlException(String s) {           super(s);       }   }   然後,把方法中的異常改為unchecked BadUrlException:

[java]  view plain  copy public void storeDataFromUrl(String url){       String data = readDataFromUrl(url);   }     

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.