異常處理

1、首先來看一下JAVA異常繼承關(guān)系:


java異常關(guān)系圖

關(guān)于Error和Exception的區(qū)別:

Error:

An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch.

錯(cuò)誤是Throwable的子類奖磁,它表示合理的應(yīng)用程序無法捕獲的嚴(yán)重問題充易。

Exception:

The class Exception and its subclasses are a form of Throwable that indicates conditions that a reasonable application might want to catch.

Exception類及其子類是Throwable的一種形式,它指示合理的應(yīng)用程序可以捕獲處理撵儿。

關(guān)于checked Exception和unchecked Exception區(qū)別:

check exception:程序編譯期就要求要被處理的 否則編譯無法通過 其定義范圍為該異常是Exception的子類但不是RuntimeException的子類 則該異常為check exception

uncheckedException:該異常是RuntimeException或者是其子類

關(guān)于 error和unchecked exception的不同

這兩種異常的發(fā)生時(shí)機(jī)都是runtime運(yùn)行時(shí) 但是error是不建議去處理的 也就是使用try-catch 因?yàn)榧幢慵恿?大部分情況也處理不了 而runtimeException是可處理的

以下內(nèi)容復(fù)制自https://blog.csdn.net/weixin_43681425/article/details/84147396#1.1

?以便后續(xù)查詢

2、異常處理:

有一些方法在聲明的時(shí)候就聲明扔出一個(gè)exception儡陨。如果這個(gè)exception是checked exception司致,則調(diào)用這個(gè)方法的時(shí)候就必須handle它煞躬。

checked exception就像一個(gè)炸彈肛鹏,如果說方法A的某處扔出一個(gè)炸彈,或者從別處接到一個(gè)炸彈(調(diào)用了另一個(gè)扔出exception的方法)恩沛, 有兩種解決方案:

自己把它拆了( try-catch-finally)在扰。 這樣的話調(diào)用方法A的方法不用擔(dān)心這個(gè)炸彈(異常)了

繼續(xù)丟出去, 誰調(diào)用方法A誰來處理(在A的method declaration的時(shí)候加上throws.)

如果采用第一種方案雷客,當(dāng)方法B調(diào)用方法A的時(shí)候芒珠,方法A已經(jīng)把炸彈拆了,方法B不用擔(dān)心任何事情搅裙。

如果采用第二種方法皱卓,方法B調(diào)用方法A的時(shí)候知道同時(shí)要接到一個(gè)炸彈,于是它有兩種解決方案呈宇,拆了好爬,或者繼續(xù)throws局雄。

2.1 如何拆炸彈 用try-catch-finally

try-catch:

一個(gè)常見的數(shù)組越界exception甥啄。是個(gè)unchecked的exception,因?yàn)榫幾g時(shí)沒有要求handle炬搭,所以是個(gè)常見的新手 runtime異常蜈漓。(不要求被handle,但是如果想handle也是可以的宫盔。)

一個(gè)try可以跟著好幾個(gè)catch, 為了分開處理不同的錯(cuò)誤:



一個(gè)exception發(fā)生之后融虽,如果是Exception1類型的,就會被第一個(gè)handle灼芭,如果不是Exception1類型的就會接著往下找catch有额,如果是Exception2類型的,就會被第二個(gè)catch塊handle彼绷。

如果Exception1和Exception2是父子關(guān)系巍佑,則兒子要先被檢測,因?yàn)槿绻职窒缺粰z測寄悯,就永遠(yuǎn)也到不了兒子那個(gè)catch塊了萤衰。

finally block:

finally block 是無論如何也會發(fā)生的一個(gè)block。 catch里的代碼如果不發(fā)生異常就不會被執(zhí)行猜旬,但是finally里面的代碼無論如何都會執(zhí)行脆栋。(除非是在try或者catch里面用System.exit(1)結(jié)束jvm倦卖。)通常用來關(guān)閉文件。



另外椿争, try-finally也是合法的怕膛。

2.2 如何繼續(xù)甩鍋 throws exception

用throws關(guān)鍵詞

來看個(gè)綜合的例子:

下面代碼由于接到了exception沒有正確handle而產(chǎn)生編譯錯(cuò)誤:


因?yàn)镕ileReader的constructor throws了一個(gè)異常

所以當(dāng)getFile方法調(diào)用FileReader的時(shí)候必須handle這個(gè)異常。

下面是一個(gè)例子用上面兩種方法處理異常:

運(yùn)行結(jié)果:

一般來講秦踪,所有的exception到了main方法這里都應(yīng)該已經(jīng)被解決了嘉竟。如果,main方法也不負(fù)責(zé)任的往外扔洋侨。舍扰。。

這樣做是可以的希坚。边苹。。在沒有文件的情況下(觸發(fā)exception)運(yùn)行結(jié)果:


3裁僧、SpringBoot異常處理實(shí)例

3.1 定義一個(gè)全局異常處理類GlobalException 通過@ControllerAdvice和@ExceptionHandler(value = “異常類型”)

3.2定義一個(gè)異常類

3.3通過自定義的類動(dòng)態(tài)獲取狀態(tài)碼

3.4 也可以將狀態(tài)碼定義在配置文件中 獲取辦法為通過定義一個(gè)配置類動(dòng)態(tài)獲取

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末个束,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子聊疲,更是在濱河造成了極大的恐慌茬底,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件获洲,死亡現(xiàn)場離奇詭異阱表,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贡珊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門最爬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人门岔,你說我怎么就攤上這事爱致。” “怎么了寒随?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵糠悯,是天一觀的道長。 經(jīng)常有香客問我妻往,道長互艾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任蒲讯,我火速辦了婚禮忘朝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘判帮。我一直安慰自己局嘁,他們只是感情好溉箕,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悦昵,像睡著了一般肴茄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上但指,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天寡痰,我揣著相機(jī)與錄音,去河邊找鬼棋凳。 笑死拦坠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剩岳。 我是一名探鬼主播贞滨,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼拍棕!你這毒婦竟也來了晓铆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绰播,失蹤者是張志新(化名)和其女友劉穎骄噪,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蠢箩,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡链蕊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忙芒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片示弓。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡讳侨,死狀恐怖呵萨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情跨跨,我是刑警寧澤潮峦,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站勇婴,受9級特大地震影響忱嘹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耕渴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一拘悦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橱脸,春花似錦础米、人聲如沸分苇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽医寿。三九已至,卻和暖如春蘑斧,著一層夾襖步出監(jiān)牢的瞬間靖秩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工竖瘾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留沟突,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓捕传,卻偏偏與公主長得像事扭,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子乐横,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349