異常處理

異常定義

Error

Java虛擬機(jī)無(wú)法解決的嚴(yán)重問題省容。如:JVM系統(tǒng)內(nèi)部錯(cuò)誤、資源耗盡等嚴(yán)重情況燎字。比如:StackOverflowError和OOM蓉冈。 一般不編寫針對(duì)性的代碼進(jìn)行處理。

棧溢出和堆溢出

Exception

分類:編譯時(shí)異常 和 運(yùn)行時(shí)異常

異常分類

異常體系結(jié)構(gòu)

* java.lang.Throwable

*? ? ? -----java.lang.Error:一般不編寫針對(duì)性的代碼進(jìn)行處理轩触。

*? ? ? -----java.lang.Exception:可以進(jìn)行異常的處理

*? ? ? ? ? ? ? ------編譯時(shí)異常(checked)

*? ? ? ? ? ? ? ? ? ? ? ? ? -----IOException

*? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? -----FileNotFoundException

*? ? ? ? ? ? ? ? ? ? ? ? ? -----ClassNotFoundException

*? ? ? ? ? ------運(yùn)行時(shí)異常(unchecked,RuntimeException)

*? ? ? ? ? ? ? ? ? -----NullPointerException

*? ? ? ? ? ? ? ? ? -----ArrayIndexOutOfBoundsException

*? ? ? ? ? ? ? ? ? -----ClassCastException

*? ? ? ? ? ? ? ? ? -----NumberFormatException

*? ? ? ? ? ? ? ? ? -----InputMismatchException

*? ? ? ? ? ? ? ? ? -----ArithmeticException

面試題:常見的異常都有哪些寞酿?舉例說明

一、編譯時(shí)異常

編譯時(shí)異常

二脱柱、運(yùn)行時(shí)異常

1.?NullPointerException :空指針

空指針異常

2. IndexOutOfBoundsException:角標(biāo)越界

1)ArrayIndexOutOfBoundsException:數(shù)組角標(biāo)越界

數(shù)組角標(biāo)越界

2)StringIndexOutOfBoundsException:字符角標(biāo)越界

字符角標(biāo)越界

3.?ClassCastException:類型轉(zhuǎn)換異常

類型轉(zhuǎn)換異常

4.?NumberFormatException:數(shù)字格式異常

數(shù)字格式異常

5.?InputMismatchException:輸入不匹配異常

輸入不匹配

6.?ArithmeticException:算術(shù)異常

算術(shù)異常

異常處理機(jī)制

異常處理機(jī)制

異常處理其實(shí)是拋?zhàn)ツP?/b>

過程一

拋":程序在正常執(zhí)行的過程中伐弹,一旦出現(xiàn)異常,就會(huì)在異常代碼處生成一個(gè)對(duì)應(yīng)異常類的對(duì)象榨为。 并將此對(duì)象拋出惨好。一旦拋出對(duì)象以后,其后的代碼就不再執(zhí)行随闺。? ? ??

關(guān)于異常對(duì)象的產(chǎn)生:

① 系統(tǒng)自動(dòng)生成的異常對(duì)象

② 手動(dòng)的生成一個(gè)異常對(duì)象日川,并拋出(throw)

過程二:

"抓":可以理解為異常的處理方式:① try-catch-finally? ② throws

異常處理機(jī)制一:try-catch-finally

try-catch-finally格式

說明:

1. finally是可選的。

2. 使用try將可能出現(xiàn)異常代碼包裝起來矩乐,在執(zhí)行過程中龄句,一旦出現(xiàn)異常回论,就會(huì)生成一個(gè)對(duì)應(yīng)異常類的對(duì)象,根據(jù)此對(duì)象的類型分歇,去catch中進(jìn)行匹配

3. 一旦try中的異常對(duì)象匹配到某一個(gè)catch時(shí)傀蓉,就進(jìn)入catch中進(jìn)行異常的處理。一旦處理完成职抡,就跳出當(dāng)前的try-catch結(jié)構(gòu)(在沒有寫finally的情況)葬燎。繼續(xù)執(zhí)行其后的代碼

4. catch中的異常類型如果沒有子父類關(guān)系,則誰(shuí)聲明在上缚甩,誰(shuí)聲明在下無(wú)所謂谱净。catch中的異常類型如果滿足子父類關(guān)系,則要求子類一定聲明在父類的上面擅威。否則岳遥,報(bào)錯(cuò)

5. 常用的異常對(duì)象處理的方式: ① String? getMessage()? ? ② printStackTrace()

6. 在try結(jié)構(gòu)中聲明的變量,再出了try結(jié)構(gòu)以后裕寨,就不能再被調(diào)用

7. try-catch-finally結(jié)構(gòu)可以嵌套*

體會(huì)1:使用try-catch-finally處理編譯時(shí)異常,是得程序在編譯時(shí)就不再報(bào)錯(cuò)派继,但是運(yùn)行時(shí)仍可能報(bào)錯(cuò)宾袜。相當(dāng)于我們使用try-catch-finally將一個(gè)編譯時(shí)可能出現(xiàn)的異常,延遲到運(yùn)行時(shí)出現(xiàn)驾窟。

體會(huì)2:開發(fā)中庆猫,由于運(yùn)行時(shí)異常比較常見,所以我們通常就不針對(duì)運(yùn)行時(shí)異常編寫try-catch-finally了绅络。針對(duì)于編譯時(shí)異常月培,我們說一定要考慮異常的處理。

finally的使用:

1.finally是可選的

2.finally中聲明的是一定會(huì)被執(zhí)行的代碼恩急。即使catch中又出現(xiàn)異常了杉畜,try中有return語(yǔ)句,catch中有return語(yǔ)句等情況衷恭。

finally舉例

最后輸出:我一定會(huì)被執(zhí)行的 和 3此叠;

3.像數(shù)據(jù)庫(kù)連接、輸入輸出流随珠、網(wǎng)絡(luò)編程Socket等資源灭袁,JVM是不能自動(dòng)的回收的,我們需要自己手動(dòng)的進(jìn)行資源的釋放窗看。此時(shí)的資源釋放茸歧,就需要聲明在finally中。

舉例

try-catch-finally 舉例


異常處理機(jī)制二:throw?+ 異常類型

????????1. "throws + 異常類型"寫在方法的聲明處显沈。指明此方法執(zhí)行時(shí)软瞎,可能會(huì)拋出的異常類型。一旦當(dāng)方法體執(zhí)行時(shí),出現(xiàn)異常铜涉,仍會(huì)在異常代碼處生成一個(gè)異常類的對(duì)象智玻,此對(duì)象滿足throws后異常類型時(shí),就會(huì)被拋出芙代。異常代碼后續(xù)的代碼吊奢,就不再執(zhí)行!

? ? ????2. 體會(huì):try-catch-finally:真正的將異常給處理掉了纹烹。throws的方式只是將異常拋給了方法的調(diào)用者页滚。? 并沒有真正將異常處理掉。?

? ? ????3. 開發(fā)中如何選擇使用try-catch-finally 還是使用throws铺呵?

? ? ? ? ? ? ? ? 3.1 如果父類中被重寫的方法沒有throws方式處理異常裹驰,則子類重寫的方法也不能使用throws,意味著如果子類重寫的方法中有異常片挂,必須使用try-catch-finally方式處理幻林。

? ? ? ? ? ? ? ? 3.2 執(zhí)行的方法a中,先后又調(diào)用了另外的幾個(gè)方法音念,這幾個(gè)方法是遞進(jìn)關(guān)系執(zhí)行的沪饺。我們建議這幾個(gè)方法使用throws的方式進(jìn)行處理。而執(zhí)行的方法a可以考慮使用try-catch-finally方式進(jìn)行處理闷愤。

手動(dòng)拋出異常:throw

通過throw手動(dòng)拋出異常(注意區(qū)分throws)

手動(dòng)拋出異常

自定義異常類

?如何自定義異常類整葡?

????1. 繼承于現(xiàn)有的異常結(jié)構(gòu):RuntimeException(不用顯示的處理) 、Exception(需要處理)

????2. 提供全局常量:serialVersionUID

????3. 提供重載的構(gòu)造器

注意 ??

1. 子類重寫的方法拋出的異常類型不大于父類被重寫的方法拋出的異常類型讥脐。

總結(jié)

總結(jié)

例題

例題1

輸出結(jié)果:

輸出結(jié)果

面試題

1. final遭居、finally、finalize三者的區(qū)別

2. throw 和 throws 的區(qū)別

throw:表示拋出一個(gè)異常類的對(duì)象旬渠,生成異常對(duì)象的過程俱萍,聲明在方法體內(nèi)。

throws:屬于異常處理的一種方式告丢,聲明在方法的生命處鼠次。


另外相似結(jié)構(gòu):Collection 和 Collections,String 和 StringBuffer 還有 StringBuilder芋齿,Arraylist 和 LinkedList腥寇,HashMap 和 LinkedHashMap,重寫和重載

不相似結(jié)構(gòu):抽象類和借口觅捆,== 和 equals()赦役,sleep() 和 wait(),

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末栅炒,一起剝皮案震驚了整個(gè)濱河市掂摔,隨后出現(xiàn)的幾起案子术羔,更是在濱河造成了極大的恐慌,老刑警劉巖乙漓,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件级历,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡叭披,警方通過查閱死者的電腦和手機(jī)寥殖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涩蜘,“玉大人嚼贡,你說我怎么就攤上這事⊥耄” “怎么了粤策?”我有些...
    開封第一講書人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)误窖。 經(jīng)常有香客問我叮盘,道長(zhǎng),這世上最難降的妖魔是什么霹俺? 我笑而不...
    開封第一講書人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任柔吼,我火速辦了婚禮,結(jié)果婚禮上吭服,老公的妹妹穿的比我還像新娘。我一直安慰自己蝗罗,他們只是感情好艇棕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著串塑,像睡著了一般沼琉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桩匪,一...
    開封第一講書人閱讀 51,521評(píng)論 1 304
  • 那天打瘪,我揣著相機(jī)與錄音,去河邊找鬼傻昙。 笑死闺骚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的妆档。 我是一名探鬼主播僻爽,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼贾惦!你這毒婦竟也來了胸梆?” 一聲冷哼從身側(cè)響起敦捧,我...
    開封第一講書人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎碰镜,沒想到半個(gè)月后兢卵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绪颖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年秽荤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菠发。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡王滤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滓鸠,到底是詐尸還是另有隱情雁乡,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布糜俗,位于F島的核電站踱稍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏悠抹。R本人自食惡果不足惜珠月,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望楔敌。 院中可真熱鬧啤挎,春花似錦、人聲如沸卵凑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)勺卢。三九已至伙判,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間黑忱,已是汗流浹背宴抚。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甫煞,地道東北人菇曲。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像抚吠,于是被迫代替她去往敵國(guó)和親羊娃。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355

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

  • 一埃跷、異常概述與異常體系結(jié)構(gòu) 1.異常:在Java語(yǔ)言中蕊玷,將程序執(zhí)行中發(fā)生的不正常情況稱為“異秤世”。 (開發(fā)過程中的...
    不差不多閱讀 197評(píng)論 0 0
  • 異常的定義 異常:在Java語(yǔ)言中垃帅,將程序執(zhí)行中發(fā)生的不正常情況稱為“異逞咏欤”。 (開發(fā)過程中的語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤不...
    黃榕生Ron閱讀 264評(píng)論 0 0
  • 定義 在Java語(yǔ)言中贸诚,將程序執(zhí)行中發(fā)生的不正常情況稱為“異撤酵ィ”(開發(fā)過程中的語(yǔ)法錯(cuò)誤和邏輯錯(cuò)誤不是異常) 分類 ...
    馮宏志閱讀 202評(píng)論 0 0
  • 一.java程序在執(zhí)行過程中所發(fā)生的異常事件可分為兩類:?Error: Java虛擬機(jī)無(wú)法解決的嚴(yán)重問題。 如: ...
    雨景江水閱讀 28評(píng)論 0 0
  • 時(shí)間:2018-07-31 作者:魏文應(yīng) 一酱固、異常 在Java語(yǔ)言中械念,將程序執(zhí)行中發(fā)生的不正常情況稱為 “異常”...
    秋的懵懂閱讀 321評(píng)論 0 0