真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中checked與unchecked異常的區(qū)別是什么

今天就跟大家聊聊有關(guān)Java中checked與unchecked異常的區(qū)別是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

涇縣ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

(一)Java的異常層次結(jié)構(gòu)

要想明白Java中checked Exception和unchecked Exception的區(qū)別,我們首先來看一下Java的異常層次結(jié)構(gòu)。

Java中checked與unchecked異常的區(qū)別是什么 

這是一個簡化的Java異常層次結(jié)構(gòu)示意圖,需要注意的是所有的類都是從Throwable繼承而來,下一層則分為兩個結(jié)構(gòu),Error和Exception。其中Error類層次描述了Java運(yùn)行時系統(tǒng)的內(nèi)部錯誤和資源耗盡錯誤,這種錯誤除了簡單的報告給用戶,并盡力阻止程序安全終止之外,一般也米有別的解決辦法了。

(二)unchecked異常和checked異常的區(qū)別

有了上面的認(rèn)識之后,我們再來看什么是checked異常,什么是unchecked的異常。其實,Java語言規(guī)范對這兩個定義十分簡單,將派生于Error或者RuntimeException的異常稱為unchecked異常,所有其他的異常成為checked異常。盡管,這個定義十分簡單,但是RuntimeException卻是一個非常讓人容易混淆的觀念,似乎我們所有的異常都是在程序運(yùn)行的過程中。我《Effective Java》中關(guān)于Ru ntimeException異常的闡述也不是那么盡如人意,

Use checked exceptions for recoverable conditions and runtime exceptions for programming errors (Item 58 in 2nd edition)

不過從這句話中我們可以簡單引申一下,也就是說,如果出現(xiàn)了RuntimeException,就一定是程序員自身的問題。比如說,數(shù)組下標(biāo)越界和訪問空指針異常等等,只要你稍加留心這些異常都是在編碼階段可以避免的異常。如果你還是覺得這兩個概念不好區(qū)分,那么“最暴力“的方法就是將常見的RuntimeException背下來,這樣就可以省去很多判斷的時間。

(三)為什么要對unchecked異常和checked異常進(jìn)行區(qū)分?

原因其實很簡單,編譯器將檢查你是否為所有的已檢查異常提供了異常處理機(jī)制,比如說我們使用Class.forName()來查找給定的字符串的class對象的時候,如果沒有為這個方法提供異常處理,編譯是無法通過的。

Java中checked與unchecked異常的區(qū)別是什么

(四)我們應(yīng)該對哪些異常進(jìn)行聲明?

我們前面說,RuntimeException是在programing過程中可以避免的錯誤,那是不是我們就不需要拋出這些異常呢?原則上來說,是這樣的,但是Java規(guī)范中并沒有對此進(jìn)行限制,只是看上去你拋出一個數(shù)組越界的異常并沒有多少實際意義,相反還會對性能造成一定的損失。那么我們應(yīng)該如何來設(shè)計拋出異常呢?我們要記住以下兩種情況是必聲明throws異常的:

調(diào)用一個checked異常的方法,例如IOException,至于原因我們前面已經(jīng)討論過了,如果拋出所有的checked異常時無法通過編譯的。程序運(yùn)行過程中發(fā)現(xiàn)錯誤,利用throw語句拋出一個異常。對于unchecked異常,無非主要是兩種情況要么是可以避免的(Runtime Exception),要么是不可控制的。這些也是需要聲明異常的。

下面列舉例子說明上面的注意事項2中提到的比較別扭的地方:

首先定義一個基本的異常類GenericException,繼承于Exception。

package check_unchecked_exceptions;

public class GenericException extends Exception{

  /**
   * 
   */
  private static final long serialVersionUID = 2778045265121433720L;
  
  public GenericException(){
    
  }
  
  public GenericException(String msg){
    super(msg);
  }
}

下面定義一個測試類VerifyException。

package check_unchecked_exceptions;

public class VerifyException {

  public void first() throws GenericException {
    throw new GenericException("checked exception");
  }
  
  public void second(String msg){
    if(msg == null){
      throw new NullPointerException("unchecked exception");
    }
  }
  
  public void third() throws GenericException{
    first();
  }
  
  public static void main(String[] args) {
    VerifyException ve = new VerifyException();
    
    try {
      ve.first();
    } catch (GenericException e) {
      e.printStackTrace();
    }

    ve.second(null);
  }
}

運(yùn)行后,在eclipse的控制臺上得到下面的信息:

 check_unchecked_exceptions.GenericException: checked exception
     at check_unchecked_exceptions.VerifyException.first(VerifyException.java:6)
     at check_unchecked_exceptions.VerifyException.main(VerifyException.java:23)
 Exception in thread "main" java.lang.NullPointerException: unchecked exception
     at check_unchecked_exceptions.VerifyException.second(VerifyException.java:11)
     at check_unchecked_exceptions.VerifyException.main(VerifyException.java:29)

上面的例子,結(jié)合checked以及unchecked的概念,可以看出Exception這個父類是checked類型,但是其子類RuntimeException (子類NullPointerException)卻是unchecked的。

看完上述內(nèi)容,你們對Java中checked與unchecked異常的區(qū)別是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)站題目:Java中checked與unchecked異常的區(qū)別是什么
文章地址:http://weahome.cn/article/jscgch.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部