Java中的異常處理

一、概述

Java異常是Java提供的一種識(shí)別和響應(yīng)錯(cuò)誤的一致性機(jī)制。

Java異常機(jī)制可以使得異常處理代碼和正常業(yè)務(wù)邏輯代碼分離媚赖,使程序更加優(yōu)雅,提高代碼的健壯性珠插。一般情況下惧磺,Java異常應(yīng)用可以回答三個(gè)問題:what、where捻撑、why磨隘。what:發(fā)生了什么錯(cuò)誤?where:哪里發(fā)生的顾患?why:為什么會(huì)發(fā)生番捂?分別由異常中異常類型、異常堆棧江解、異常信息回答设预。

二、框架

exception01-01.jpg

Throwable

Throwable是Java語言中所有錯(cuò)誤或異常的超類犁河。

Throwable包含兩個(gè)子類:Error和Exception鳖枕。Error表示“錯(cuò)誤”,Exception表示“異澈艄桑”

Throwable中包含異常堆棧和異常信息耕魄。可以使用printStackTrace()getMessage()獲取彭谁。

Error

Throwable子類吸奴,用于指示應(yīng)用程序不該捕獲且無法解決的嚴(yán)重問題。

編譯器并不會(huì)檢查Error缠局。

Exception

Throwable子類则奥,用于指示應(yīng)用程序發(fā)生的異常。

RuntimeException

Exception子類狭园,用于指示Java 虛擬機(jī)正常運(yùn)行期間拋出的異常读处。

編譯器不會(huì)檢查RuntimeException。

如果產(chǎn)生了RuntimeException唱矛,需要修改代碼來進(jìn)行避免罚舱。例如井辜,若會(huì)發(fā)生除數(shù)為零的情況,則需要通過代碼避免該情況的發(fā)生管闷。

三粥脚、異常分類

java中異常可以分為三類:被檢查的異常(Checked Exception)包个、運(yùn)行時(shí)異常(Runtime Exception)和錯(cuò)誤(Error)刷允。

1.被檢查異常

范圍:Exception類及其子類(不包含RuntimeException及其子類)

特點(diǎn):編譯器會(huì)檢查它。此類異常碧囊,要么通過throws進(jìn)行聲明拋出树灶,要么通過try-catch進(jìn)行捕獲處理,否則不能通過編譯糯而。

處理:拋出或者捕獲異常天通,并嘗試恢復(fù)。

常見:

異常 說明
CloneNotSupportedException 通過clone()接口去克隆一個(gè)對(duì)象熄驼,而該對(duì)象對(duì)應(yīng)的類沒有實(shí)現(xiàn)Cloneable接口

2. 運(yùn)行時(shí)異常

范圍:RuntimeException及其子類

特點(diǎn):編譯器不會(huì)檢查運(yùn)行時(shí)異常土砂。即“沒有通過throws聲明拋出它”或者“沒有在try-catch中捕獲它”,都是可以通過編譯的谜洽。

處理:當(dāng)產(chǎn)生運(yùn)行時(shí)異常時(shí)萝映,需要檢查代碼,完善代碼邏輯來避免阐虚。

常見:

異常 說明
ArithmeticException 除數(shù)為0
IndexOutOfBoundsException 數(shù)組越界
ConcurrentModificationException 并發(fā)修改

3.錯(cuò)誤

范圍:Error及其子類序臂。

特點(diǎn):編譯器不會(huì)檢查它。

處理:程序本身無法修復(fù)這些錯(cuò)誤的实束。

常見:

異常 說明
VirtualMachineError 虛擬機(jī)錯(cuò)誤

4.使用

對(duì)于可以恢復(fù)的條件使用被檢查異常奥秆,對(duì)于程序錯(cuò)誤使用運(yùn)行時(shí)異常。

四咸灿、使用建議

1. 合理使用被檢查異常

使用被檢查的異常必須同時(shí)滿足兩個(gè)條件:

  1. 正確調(diào)用API并不能阻止異常的發(fā)生构订。
  2. 一旦發(fā)生了異常,調(diào)用者可以采取有用的動(dòng)作對(duì)程序進(jìn)行處理

2. 合理包裝低層異常

盡量避免一個(gè)方法拋出一個(gè)與它執(zhí)行的任務(wù)沒有明顯的關(guān)聯(lián)關(guān)系的異常避矢。常見于方法傳遞由低層抽象拋出的異常悼瘾,這種情況發(fā)生時(shí),不僅讓人困惑审胸,而且也"污染"了高層API亥宿。

為了避免這個(gè)問題,高層實(shí)現(xiàn)應(yīng)該捕獲低層的異常砂沛,同時(shí)拋出一個(gè)可以按照高層抽象進(jìn)行介紹的異常烫扼。這種做法被稱為"異常轉(zhuǎn)譯(exception translation)"。

例如碍庵,在Java的集合框架AbstractSequentialList的get()方法如下:

public E get(int index) {
    try {
        return listIterator(index).next();
    } catch (NoSuchElementException exc) {
        throw new IndexOutOfBoundsException("Index: "+index);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末映企,一起剝皮案震驚了整個(gè)濱河市悟狱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堰氓,老刑警劉巖芽淡,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異豆赏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)富稻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門掷邦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人椭赋,你說我怎么就攤上這事抚岗。” “怎么了哪怔?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵宣蔚,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我认境,道長(zhǎng)胚委,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任叉信,我火速辦了婚禮亩冬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘硼身。我一直安慰自己硅急,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布佳遂。 她就那樣靜靜地躺著营袜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪丑罪。 梳的紋絲不亂的頭發(fā)上荚板,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音吩屹,去河邊找鬼啸驯。 笑死,一個(gè)胖子當(dāng)著我的面吹牛祟峦,可吹牛的內(nèi)容都是我干的罚斗。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼宅楞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼针姿!你這毒婦竟也來了袱吆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤距淫,失蹤者是張志新(化名)和其女友劉穎绞绒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體榕暇,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蓬衡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彤枢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狰晚。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖缴啡,靈堂內(nèi)的尸體忽然破棺而出壁晒,到底是詐尸還是另有隱情,我是刑警寧澤业栅,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布秒咐,位于F島的核電站,受9級(jí)特大地震影響碘裕,放射性物質(zhì)發(fā)生泄漏携取。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一帮孔、第九天 我趴在偏房一處隱蔽的房頂上張望歹茶。 院中可真熱鬧,春花似錦你弦、人聲如沸惊豺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尸昧。三九已至,卻和暖如春旷偿,著一層夾襖步出監(jiān)牢的瞬間烹俗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工萍程, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幢妄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓茫负,卻偏偏與公主長(zhǎng)得像蕉鸳,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 大家好潮尝,今天是2017年10月8日 是阿昌每天一篇原創(chuàng)日記的 第67篇 中國(guó)俗話講:‘慢工出細(xì)活’榕吼,任何事情都來不...
    陪伴家阿昌閱讀 192評(píng)論 0 0
  • 自從有了范登的寫作群,每天寫東西的時(shí)間突然多了起來勉失,感覺可能沒什么好寫的東西了羹蚣。因?yàn)橐獙懧铮?jīng)歷的就只有這么多嘛...
    Albert陳凱閱讀 126評(píng)論 1 0
  • 首先要明白乱凿,說服一個(gè)人是多么困難顽素,以及這背后的原因。 美國(guó)有一個(gè)名叫“文化認(rèn)識(shí)項(xiàng)目”(簡(jiǎn)稱CCP)的研究小組徒蟆,小組...
    三七悅讀閱讀 196評(píng)論 0 0
  • 呆呆的立在枝頭 靜靜的等候 遙望天空的方向 那里是否有一位知己 站在遠(yuǎn)處眺望 他應(yīng)該和我一樣 渴望安穩(wěn)的陪伴 一起...
    瑾晞閱讀 484評(píng)論 11 8