6.2-全棧Java筆記:異常處理機制的分類

異常分類

JDK?中定義了很多異常類卒废,這些類對應了各種各樣可能出現(xiàn)的異常事件寓盗,所有異常對象都是派生于Throwable類的一個實例。如果內(nèi)置的異常類不能夠滿足需要故慈,還可以創(chuàng)建自己的異常類辩昆。

?圖1?異常的分類

?Error

Error類層次描述了Java運行時系統(tǒng)內(nèi)部錯誤和資源耗盡錯誤阅酪。這類錯誤是我們無法控制的旨袒,同時也是非常罕見的錯誤汁针。所以在編程中,不去處理這類錯誤砚尽。

Error表明系統(tǒng)JVM已經(jīng)處于不可恢復的崩潰狀態(tài)中施无。我們不需要管他。

?圖2 java.lang包中Error的類

Error與Exception的區(qū)別

1.?我開著車走在路上必孤,一頭豬沖在路中間猾骡,我剎車。這叫一個異常敷搪。

2.我開著車在路上兴想,發(fā)動機壞了,我停車赡勘,這叫錯誤嫂便。系統(tǒng)處于不可恢復的崩潰狀態(tài)。發(fā)動機什么時候壞闸与?我們普通司機能管嗎毙替?不能。發(fā)動機什么時候壞是汽車廠發(fā)動機制造商的事践樱。

Exception

Exception類所有異常類的父類厂画,其子類對應了各種各樣可能出現(xiàn)的異常事件。?Exception分為:

1.RuntimeException ??運行時異常

2.CheckedException???編譯時異常

?RuntimeException運行時異常

派生于RuntimeException的異常拷邢,如被?0?除袱院、數(shù)組下標超范圍等,其產(chǎn)生比較頻繁,處理麻煩忽洛,如果顯式的聲明或捕獲將會對程序可讀性和運行效率影響很大抛人。?因此由系統(tǒng)自動檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理)。

這類異常通常是由編程錯誤導致的脐瑰,所以在編寫程序時妖枚,并不要求必須使用異常處理機制來處理這類異常,經(jīng)常需要通過增加“邏輯處理來避免這些異常”苍在。

【示例1ArithmeticException異常绝页,試圖除以0

public?class?Test {

????public?static?void?main(String[] args) {

???????int?b=0;

???????System.out.println(1/b);

??? }

}

? 示例1? ?ArithmeticException異常

解決如上異常需要修改代碼:

public?class?? Test {

????public?static?void?? main(String[] args) {

???????int?? b=0;

???????if(b!=0){

?????????? System.out.println(1/b);

?????? }

??? }

}

【示例2NullPointerException異常,當程序訪問一個空對象的成員變量或方法寂恬,訪問一個空數(shù)組的成員時發(fā)生续誉。怎么處理?

public?class?Test {

????public?static?void?main(String[] args) {

?????? String str=null;

?????? System.out.println(str.charAt(0));

??? }

}

? ?示例2 ?NullPointerException異常

解決空指針異常初肉,通常是增加非空判斷:

public?class?? Test {

????public?static?void?? main(String[] args) {

?????? String str=null;

???????if(str!=null){

?????????? System.out.println(str.charAt(0));

?????? }

??? }

}

【示例3ClassCastException異常

public?class?Test {

????public?static?void?main(String[] args) {

?????? Animal a=new?Dog();

?????? Cat c=(Cat)a;

??? }

}

class?Animal{

}

class?Dog?extends?Animal{

}

class?Cat?extends?Animal{

}



示例3?ClassCastException異常

解決ClassCastException的典型方式:

public?class?? Test {

????public?static?void?? main(String[] args) {

?????? Animal a=new?? Dog();

???????if(a?instanceof?? Cat){

?????????? Cat?c=(Cat)a;

?????? }

??? }

}

class?? Animal{

}

class?? Dog?extends?Animal{

}

class?? Cat?extends?Animal{

}

【示例4ArrayIndexOutOfBoundsException異常酷鸦,訪問的元素下表超過數(shù)組長度

public?class?Test {

????public?static?void?main(String[] args) {

???????int?[] arr=new?int[5];

?????? System.out.println(arr[5]);

??? }

}

示例4?ArrayIndexOutOfBoundsException異常

解決數(shù)組索引越界異常的方式,增加關(guān)于邊界的判斷:

public?class?? Test {

????public?static?void?? main(String[] args) {

???????int?[] ? arr=new?int[5];

???????int?a ? = 5;

???????if(a<arr.length){

?????????? System.out.println(arr[a]);

?????? }

??? }

}

【示例5NumberFormatException牙咏,數(shù)字格式異常臼隔!

public?class?Test {

????public?static?void?main(String[] args) {

?????? String str = "1234abcf";

?????? System.out.println(Integer.parseInt(str));

??? }

}

示例5?NumberFormatException異常

數(shù)字格式化異常的解決,可以引入正則表達式判斷是否為數(shù)字:


import?? java.util.regex.Matcher;

import?? java.util.regex.Pattern;

public?class?? Test {

????public?static?void?? main(String[] args) {

?????? String str =?"1234abcf";

?????? Pattern p = Pattern.compile("^\\d+$");?

?????? Matcher m = p.matcher(str);


? ? ? ?if(m.matches()){???//如果str匹配代表數(shù)字的正則表達式

?????????? System.out.println(Integer.parseInt(str));

?????? }

??? }

}

?Checked Exception?已檢查異常

所有不是RuntimeException的異常妄壶,統(tǒng)稱為Checked Exception摔握,又被稱為“已檢查異常”丁寄。?這類異常在編譯時就必須做出處理氨淌。

圖?3 ?Checked Exception必須處理,否則無法通過編譯




「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記伊磺。筆者江湖人稱 Mr. G盛正,10年Java研發(fā)經(jīng)驗,曾在神州數(shù)碼屑埋、航天院某所研發(fā)中心從事軟件設計及研發(fā)工作豪筝,從小白逐漸做到工程師、高級工程師雀彼、架構(gòu)師壤蚜。精通Java平臺軟件開發(fā),精通JAVAEE徊哑,熟悉各種流行開發(fā)框架袜刷。


筆記包含從淺入深的六大部分:

A-Java入門階段

B-數(shù)據(jù)庫從入門到精通

C-手刃移動前端和Web前端

D-J2EE從了解到實戰(zhàn)

E-Java高級框架精解

F-Linux和Hadoop?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市莺丑,隨后出現(xiàn)的幾起案子著蟹,更是在濱河造成了極大的恐慌墩蔓,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萧豆,死亡現(xiàn)場離奇詭異奸披,居然都是意外死亡,警方通過查閱死者的電腦和手機涮雷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門阵面,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人洪鸭,你說我怎么就攤上這事样刷。” “怎么了览爵?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵置鼻,是天一觀的道長。 經(jīng)常有香客問我蜓竹,道長箕母,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任俱济,我火速辦了婚禮嘶是,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘姨蝴。我一直安慰自己俊啼,他們只是感情好,可當我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布左医。 她就那樣靜靜地躺著,像睡著了一般同木。 火紅的嫁衣襯著肌膚如雪浮梢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天彤路,我揣著相機與錄音秕硝,去河邊找鬼。 笑死洲尊,一個胖子當著我的面吹牛远豺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坞嘀,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼躯护,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了丽涩?” 一聲冷哼從身側(cè)響起棺滞,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裁蚁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后继准,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枉证,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年移必,在試婚紗的時候發(fā)現(xiàn)自己被綠了室谚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡崔泵,死狀恐怖舞萄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情管削,我是刑警寧澤倒脓,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站含思,受9級特大地震影響崎弃,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜含潘,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一饲做、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遏弱,春花似錦盆均、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至饰抒,卻和暖如春肮砾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背袋坑。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工仗处, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枣宫。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓婆誓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親也颤。 傳聞我的和親對象是個殘疾皇子洋幻,可洞房花燭夜當晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關(guān)的語法歇拆,內(nèi)部類的語法鞋屈,繼承相關(guān)的語法范咨,異常的語法,線程的語...
    子非魚_t_閱讀 31,644評論 18 399
  • 文章來源:http://www.54tianzhisheng.cn/2017/06/04/Java-Thread/...
    beneke閱讀 1,486評論 0 1
  • 【程序1】 題目:古典問題:有一對兔子厂庇,從出生后第3個月起每個月都生一對兔子渠啊,小兔子長到第三個月后每個月又生一對兔...
    葉總韓閱讀 5,137評論 0 41
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應用。 當JAVA程序違反了JA...
    八爺君閱讀 4,592評論 1 114
  • 2016歐洲杯A組末輪权旷,法國將在里爾的皮埃爾-莫魯瓦球場迎戰(zhàn)瑞士替蛉。已經(jīng)提前晉級的法國或?qū)㈥嚾葺啌Q備戰(zhàn)淘汰賽...
    梔上清帆閱讀 205評論 0 2