最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java中的checked異常和unchecked異常區(qū)別

 更新時間:2018年02月07日 10:22:24   作者:在地圖上飛行  
這篇文章主要介紹了詳解Java中的checked異常和unchecked異常區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

(一)Java的異常層次結構

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

這里寫圖片描述 

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

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

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

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

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

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

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

這里寫圖片描述

(四)我們應該對哪些異常進行聲明?

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

調(diào)用一個checked異常的方法,例如IOException,至于原因我們前面已經(jīng)討論過了,如果拋出所有的checked異常時無法通過編譯的。程序運行過程中發(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);
  }
}

運行后,在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)

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java 編程如何使用 Class.forName() 加載類

    Java 編程如何使用 Class.forName() 加載類

    在一些應用中,無法事先知道使用者將加載什么類,而必須讓使用者指定類名稱以加載類,可以使用 Class的靜態(tài)forName()方法實現(xiàn)動態(tài)加載類,這篇文章主要介紹了Java編程如何使用Class.forName()加載類,需要的朋友可以參考下
    2022-06-06
  • java實現(xiàn)攝像頭截圖功能

    java實現(xiàn)攝像頭截圖功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)攝像頭截圖功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • 解決Maven靜態(tài)資源過濾問題

    解決Maven靜態(tài)資源過濾問題

    在我們使用Maven構建項目的時候,會默認過濾掉靜態(tài)資源,所以,需要手動來配置,本文就介紹一下Maven靜態(tài)資源過濾的問題解決,感興趣的可以了解一下
    2021-06-06
  • SpringMVC通過Ajax處理Json數(shù)據(jù)的步驟詳解

    SpringMVC通過Ajax處理Json數(shù)據(jù)的步驟詳解

    這篇文章主要介紹了SpringMVC通過Ajax處理Json數(shù)據(jù)的步驟詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • SpringAOP切點函數(shù)實現(xiàn)原理詳解

    SpringAOP切點函數(shù)實現(xiàn)原理詳解

    這篇文章主要介紹了SpringAOP切點函數(shù)實現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題

    SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題

    這篇文章主要介紹了SSM?Mapper文件查詢出返回數(shù)據(jù)查不到個別字段的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 簡單聊一聊Spring中Bean別名的處理原理

    簡單聊一聊Spring中Bean別名的處理原理

    今天來和小伙伴們聊一聊 Spring 中關于 Bean 別名的處理邏輯,別名,顧名思義就是給一個 Bean 去兩個甚至多個名字,整體上來說,在 Spring 中,有兩種不同的別名定義方式,感興趣的小伙伴跟著小編一起來看看吧
    2023-09-09
  • Spring Boot(四)之使用JWT和Spring Security保護REST API

    Spring Boot(四)之使用JWT和Spring Security保護REST API

    這篇文章主要介紹了Spring Boot(四)之使用JWT和Spring Security保護REST API的相關知識,需要的朋友可以參考下
    2017-04-04
  • 基于Java回顧之反射的使用分析

    基于Java回顧之反射的使用分析

    本篇文章是對Java反射的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 保證緩存和數(shù)據(jù)庫的數(shù)據(jù)一致性詳解

    保證緩存和數(shù)據(jù)庫的數(shù)據(jù)一致性詳解

    在實際開發(fā)過程中,緩存的使用頻率是非常高的,只要使用緩存和數(shù)據(jù)庫存儲,就難免會出現(xiàn)雙寫時數(shù)據(jù)一致性的問題,本文主要介紹了如何保證緩存和數(shù)據(jù)庫的數(shù)據(jù)一致性,需要的小伙伴可以參考閱讀
    2023-04-04

最新評論

师宗县| 临邑县| 舞钢市| 通城县| 油尖旺区| 璧山县| 峨山| 蒙城县| 兰州市| 乌拉特中旗| 景泰县| 天津市| 扶沟县| 广东省| 汉寿县| 钟山县| 宜宾县| 镇远县| 体育| 阜新市| 化德县| 墨江| 景宁| 乌恰县| 勐海县| 定安县| 郧西县| 闸北区| 静安区| 临潭县| 镇康县| 陆川县| 淳安县| 金湖县| 珲春市| 奉贤区| 洛浦县| 保靖县| 全南县| 沭阳县| 潞西市|