日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Throwable、Error、Exception、RuntimeException 区别 联系

發布時間:2025/5/22 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Throwable、Error、Exception、RuntimeException 区别 联系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

1.Throwable 類是 Java 語言中所有錯誤或異常的超類。它的兩個子類是Error和Exception;


2.Error 是 Throwable 的子類,用于指示合理的應用程序不應該試圖捕獲的嚴重問題。大多數這樣的錯誤都是異常條件。雖然 ThreadDeath 錯誤是一個“正規”的條件,但它也是 Error 的子類,因為大多數應用程序都不應該試圖捕獲它。在執行該方法期間,無需在其 throws 子句中聲明可能拋出但是未能捕獲的 Error 的任何子類,因為這些錯誤可能是再也不會發生的異常條件。


3.Exception 類及其子類是 Throwable 的一種形式,它指出了合理的應用程序想要捕獲的條件。


4.RuntimeException 是那些可能在 Java 虛擬機正常運行期間拋出的異常的超類。可能在執行方法期間拋出但未被捕獲的RuntimeException 的任何子類都無需在 throws 子句中進行聲明。它是Exception的子類。


5.方法重寫時:在子類中一個重寫的方法可能只拋出父類中聲明過的異常或者異常的子類


Error與Exception有什么區別?


Error類和Exception類都繼承自Throwable類。

  • Error的繼承關系:

java.lang.Object?
?java.lang.Throwable
??????java.lang.Error

?

  • Exception的繼承關系:

java.lang.Object
java.lang.Throwable
?????java.lang.Exception

?

?

二者的不同之處:

?

Exception:

1.可以是可被控制(checked) 或不可控制的(unchecked)?

2.表示一個由程序員導致的錯誤?

3.應該在應用程序級被處理

?

Error:

1.總是不可控制的(unchecked)?

2.經常用來用于表示系統錯誤或低層資源的錯誤?

3.如何可能的話,應該在系統級被捕捉

?

?

?

Java 中定義了兩類異常:?


  1) Checked exception: 這類異常都是Exception的子類 。異常的向上拋出機制進行處理,假如子類可能產生A異常,那么在父類中也必須throws A異常。可能導致的問題:代碼效率低,耦合度過高。
  
  2) Unchecked exception: 這類異常都是RuntimeException的子類,雖然RuntimeException同樣也是Exception的子類,但是它們是非凡的,它們不能通過client code來試圖解決,所以稱為Unchecked exception?。

?

?

Java 中異常類的繼承關系圖:



?




Checked Exception與Runtime Exception 的區別

Java里有個很重要的特色是Exception ,也就是說允許程序產生例外狀況。而在學Java 的時候,我們也只知道Exception 的寫法,卻未必真能了解不同種類的Exception 的區別。

  首先,您應該知道的是Java 提供了兩種Exception 的模式,一種是執行的時候所產生的Exception (Runtime Exception),另外一種則是受控制的Exception (Checked Exception)。

  所有的Checked Exception 均從java.lang.Exception 繼承而來,而Runtime Exception 則繼承java.lang.RuntimeException 或java.lang.Error (實際上java.lang.RuntimeException 的上一層也是java.lang.Exception)。

  當我們撰寫程序的時候,我們很可能會對選擇某種形式的Exception 感到困擾,到底我應該選擇Runtime Exception 還是Checked Exception ?

  其實,在運作上,我們可以通過Class 的Method 如何產生某個Exception以及某個程序如何處理這個被產生來的Exception 來了解它們之間的差異。
首先我們先建立一個Exception

[java]? view plain copy
  • public?class?CException?extends?Exception?{??
  • ????public?CException()?{??
  • ????}??
  • ??
  • ????public?CException(String?message)?{??
  • ????????super(message);??
  • ????}??
  • }??

  • 然后我們撰寫一個可能產生 CException 的 Class
    [java]? view plain copy
  • public?class?TestException?{??
  • ????public?void?method1()?throws?CException?{??
  • ????????throw?new?CException("Test?Exception");??
  • ????}??
  • ??
  • ????public?void?method2(String?msg)?{??
  • ????????if?(msg?==?null)?{??
  • ????????????throw?new?NullPointerException("Message?is?null");??
  • ????????}??
  • ????}??
  • ??
  • ????public?void?method3()?throws?CException?{??
  • ????????method1();??
  • ????}??
  • ??
  • ????//?以下省略??
  • ????//?...??
  • }??
  • 在這三個method 中,我們看到了method1 和method2 的程序碼內都會產生Exception,但method3 的程序碼中(大括號內),并沒產生Exception,但在method3 的定義中,暗示了這個method 可能產生CException。
    呼叫method1() 的程序,必須將method1() 包含在try 與catch 中,如:
    [java]? view plain copy
  • public?class?Runtest?{??
  • ????//?....??
  • ????public?static?void?main(String?argv[])?{??
  • ????????TestException?te?=?new?TestException();??
  • ????????try?{??
  • ????????????te.method1();??
  • ????????}?catch?(CException?ce)?{??
  • ????????????//?....??
  • ????????????ce.printStackTrace();??
  • ????????}??
  • ????}??
  • ????//?...??
  • }??
  • 雖然包含在try 與catch 中,并不表示這段程序碼一定會收到CException,但它的用意在于提醒呼叫者,執行這個method 可能產生的意外,而使用者也必須要能針對這個意外做出相對應的處理方式。
    當使用者呼叫method2() 時,并不需要使用try 和catch 將程序碼包起來,因為method2 的定義中,并沒有throws 任何的Exception ,如:
    [java]? view plain copy
  • public?class?Runtest??
  • {??
  • //?....??
  • public?static?void?main(String?argv[])??
  • {??
  • ??
  • testException?te?=?new?testException();??
  • ??
  • //?不會產生?Exception??
  • te.method2("Hello");??
  • ??
  • //?會產生?Exception??
  • te.method2(null);??
  • }??
  • //?...??
  • }??
  • 程序在執行的時候,也不見得會真的產生NullPointerException ,這種Exception 叫做runtime exception 也有人稱為unchecked exception ,產生Runtime Exception 的method (在這個范例中是method2) 并不需要在宣告method 的時候定義它將會產生哪一種Exception 。
    在testException 的method3() 中,我們看到了另外一種狀況,也就是method3里呼叫了method1() ,但卻沒有將method1 包在try 和catch 之間。相反,在method3() 的定義中,它定義了CException,實際上就是如果method3 收到了CException ,它將不處理這個CException ,而將它往外丟。當然,由于method3 的定義中有throws CException ,因此呼叫method3 的程序碼也需要有try catch 才行。
    因此從程序的運作機制上看,Runtime Exception與Checked Exception 不一樣,然而從邏輯上看,Runtime Exception 與Checked Exception 在使用的目的上也不一樣。
    一般而言,Checked Exception 表示這個Exception 必須要被處理,也就是說程序設計者應該已經知道可能會收到某個Exception(因為要try catch住) ,所以程序設計者應該能針對這些不同的Checked Exception 做出不同的處理。
    而Runtime Exception 通常會暗示著程序上的錯誤,這種錯誤會導致程序設計者無法處理,而造成程序無法繼續執行下去。
    看看下面的例子:
    String message[] = {"message1", "message2","message3"}; System.out.println(message[3]);
    這段程序碼在Compile 時并沒問題,但在執行時則會出現ArrayIndexOutOfBoundException 的例外,在這種狀況下,我們亦無法針對這個Runtime Exception 做出有意義的動作,這就像是我們呼叫了testException 中的method2 ,卻引發了它的NullPointerException 一樣,在這種狀況下,我們必須對程序碼進行修改,從而避免這個問題。
    因此,實際上我們應該也必須要去抓取所有的Checked Exception,同時最好能在這些Checked Exception 發生的時候做出相對應的處理,好讓程序能面對不同的狀況。
    然而對于Runtime Exception ,有些人建議將它catch 住,然后導向其它地方,讓程序繼續執行下去,這種作法并非不好,但它會讓我們在某些測試工具下認為我們的程序碼沒有問題,因為我們將Runtime Exception "處理"掉了,事實卻不然!譬如很多人的習慣是在程序的進入點后用個大大的try catch 包起來,如:

    [html]? view plain copy
  • public?class?Runtest1?{??
  • ????public?static?void?main(String?argv[])?{??
  • ????????try?{??
  • ????????????//?...??
  • ????????}?catch?(Exception?e)?{??
  • ????????}??
  • ????}??
  • }??

  • 在這種情況下,我們很可能會不知道發生了什么Exception 或是從哪一行發出的,因此在面對不同的Checked Exception時,我們可已分別去try catch它。而在測試階段時,如果碰到Runtime Exception ,我們可以讓它就這樣發生,接著再去修改我們的程序碼,讓它避免Runtime Exception,否則,我們就應該仔細追究每一個Exception ,直到我們可以確定它不會有Runtime Exception 為止!

      對于Checked Exception 與Runtime Exception ,我想應該有不少人會有不同的觀點,無論如何,程序先要能執行,這些Exception 才有機會產生。因此,我們可以把這些Exception 當成是Bug ,也可以當成是不同的狀況(Checked Exception),或當成是幫助我們除錯的工具(Runtime Exception),但前提是我們需要處理這些Exception ,如果不處理,那么問題或狀況就會永遠留在那里。
    參考至:http://blog.csdn.net/liuj2511981/article/details/8524418

    轉載于:https://my.oschina.net/hanzhankang/blog/195529

    總結

    以上是生活随笔為你收集整理的Throwable、Error、Exception、RuntimeException 区别 联系的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 超碰88| 欧美精品1区| 国产精品成人av久久 | 黄色a一级 | 国产精品自拍片 | 日韩免费一区二区三区 | 美女洗澡隐私免费网站 | 久久久精品中文字幕麻豆发布 | 男生桶女生肌肌 | 色婷婷色婷婷 | 欧美福利影院 | 超碰在线最新 | 少妇一级淫免费播放 | 聚色av | 在线欧美a| 欧美福利在线 | 一区三区视频在线观看 | 国产95在线 | 五月婷久久 | 一节黄色片 | 日韩欧美无 | 国产97色在线 | 日韩 | 久久综合久久久久 | 91视频中文字幕 | 日本女人hd | 成人免费国产 | 艳妇臀荡乳欲伦交换gif | 中文字幕无码精品亚洲资源网久久 | 亚洲午夜在线视频 | 黄色三级在线观看 | 综合伊人久久 | 激情久久视频 | 日本性爱视频在线观看 | 一女双乳被两男吸视频 | 欧美日韩xxxx | 九九视频在线播放 | 97涩涩网 | 日本我不卡 | 免费毛片大全 | 国产99久久九九精品无码 | a v免费视频 | 嫩草视频在线播放 | 法国空姐在线观看免费 | 欧美壮男野外gaytube | 久久久欧洲 | 中文字幕+乱码+中文字幕明步 | 中文幕无线码中文字蜜桃 | 91久久久久久久 | 97av视频| 麻豆网站在线观看 | 538在线精品视频 | 日韩在线黄色 | 一区二区精品久久 | 男女偷爱性视频刺激 | 操操操视频 | 私密spa按摩按到高潮 | 亚洲福利视频一区 | 欧美精品91 | 99re国产 | 青娱乐国产在线 | 91高跟黑色丝袜呻吟动态图 | 久久久久久久香蕉 | 蜜桃av一区二区 | 亚洲国内自拍 | 亚洲综合另类 | 美女日日日 | 97自拍视频| av在线资源站 | 在线看片成人 | 久一在线视频 | 欧美蜜桃视频 | 国产福利一区二区 | 国产午夜小视频 | 性高潮视频在线观看 | 日韩欧美成人一区二区三区 | 在线免费观看国产精品 | 国产噜噜噜噜噜久久久久久久久 | 国产乱码精品一区二区三区亚洲人 | 污污视频在线观看免费 | 欧美伦理片网站 | 日韩欧美综合 | 最新中文在线视频 | 欧美肥老妇 | 69国产精品视频 | 在线国产精品一区 | 精品视频一二三 | 国产影音先锋 | 91沈先生在线 | 性欧美8khd高清极品 | 成人私密视频 | 日韩视频免费观看 | av鲁丝一区鲁丝二区鲁丝三区 | 成人3d动漫一区二区三区 | 国产日韩成人内射视频 | 国产福利精品在线观看 | 波多野结衣有码 | 欧美三级免费观看 | 制服丝袜中文字幕在线 | 久久久人妻无码一区二区 |