一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務器之家 - 編程語言 - JAVA教程 - 詳解Java中的checked異常和unchecked異常區別

詳解Java中的checked異常和unchecked異常區別

2021-04-01 14:54在地圖上飛行 JAVA教程

這篇文章主要介紹了詳解Java中的checked異常和unchecked異常區別,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

(一)java的異常層次結構

要想明白java中checked exception和unchecked exception的區別,我們首先來看一下java的異常層次結構。

詳解Java中的checked異常和unchecked異常區別

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

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

有了上面的認識之后,我們再來看什么是checked異常,什么是unchecked的異常。其實,java語言規范對這兩個定義十分簡單,將派生于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)

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

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

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

詳解Java中的checked異常和unchecked異常區別

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package check_unchecked_exceptions;
 
public class genericexception extends exception{
 
  /**
   *
   */
  private static final long serialversionuid = 2778045265121433720l;
  
  public genericexception(){
    
  }
  
  public genericexception(string msg){
    super(msg);
  }
}

下面定義一個測試類verifyexception。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/qq_14982047/article/details/50989761

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99热久热这里只精品 | 日本高清不卡一区久久精品 | 美女用手扒开粉嫩的屁股 | 成人做视频免费 | 香蕉久久一区二区三区啪啪 | 午夜视频网站 | chinesexxxx高中生gay | 五月激情丁香婷婷综合第九 | 免费看又黄又爽又猛的视频软件- | 精品国产品香蕉在线观看75 | 亚洲性色永久网址 | xxoo做爰猛烈动态 | cos美女被黄网站 | 亚洲xxxxxhd奶水女人 | 亚洲一区二区精品推荐 | acg火影忍者熟密姬纲手h | 亚洲成av人片天堂网 | 四虎在线视频免费观看 | 特级淫片大乳女子高清视频 | 日韩国产欧美精品综合二区 | 日本视频在线观看 | 亚洲伦理视频 | 国产精品一级视频 | 成人福利在线 | 湿好紧太硬了我太爽了 | a一区二区三区视频 | 门房秦大爷最新章节阅读 | 啊哈用力cao我 | h玉足嫩脚嗯啊白丝 | 九九热免费在线观看 | 视频一区在线免费观看 | 2020最新韩国理论三级0k | 秋葵丝瓜茄子草莓榴莲樱桃 | 国产第7页| 色天天综合色天天碰 | 性夜影院午夜看片 | 91小视频在线观看免费版高清 | 古代双性美人被老糟蹋 | 亚洲国产情侣一区二区三区 | 精品亚洲视频在线 | 久9视频这里只有精品123 |