第四部分 異常

程序在運(yùn)行或者編譯的過程當(dāng)中發(fā)生了問題稱為異常了牛,異常處理的時(shí)候系統(tǒng)進(jìn)行是模糊匹配偷办,也就是說只要處理的異常大于發(fā)生的異常就可以了

? ? ? ? ?假設(shè)調(diào)用了一個(gè)不是自己寫的方法谍婉,該方法執(zhí)行某些有風(fēng)險(xiǎn)的任務(wù)彪腔,可能會(huì)在運(yùn)行期間出狀況攒钳,你必須認(rèn)識(shí)到該方法的是有風(fēng)險(xiǎn)的,你得寫出發(fā)生狀況時(shí)的處理代碼香浩,未雨綢繆


面試題:

使用什么方式可以使程序停止運(yùn)行类缤?

1程序發(fā)生未處理的異常

2使用System.exit(int status)


面試題:java代碼是從上往下執(zhí)行,所以當(dāng)try跟多個(gè)catch邻吭,如果第一個(gè)catch已經(jīng)catch住異常餐弱,那么下面的catch就不會(huì)繼續(xù)執(zhí)行



運(yùn)行期出現(xiàn)的錯(cuò)誤

Throwable:

Error:JVM內(nèi)部錯(cuò)誤,無(wú)法處理

Exception:外在因素導(dǎo)致一般性錯(cuò)誤 ?

(1)RuntimeException ?可以不捕獲,出錯(cuò)后改代碼(邏輯異常)

(2)其他(編譯異常):需捕獲


異常的處理方式

(1)拋出異常:格式 ?throws ?異常類名 ? ? ? ? ? //調(diào)用者必須要處理main膏蚓,不然就漏給虛擬機(jī)了

(2)如果把有風(fēng)險(xiǎn)程序代碼放在try/catch塊猖败,編譯器會(huì)放心很多,try/catch塊會(huì)告訴編譯器你確實(shí)知道所調(diào)用方法會(huì)有風(fēng)險(xiǎn)降允,并且也已經(jīng)準(zhǔn)備好處理它恩闻。注:try{}和catch{}之間不可以有代碼

捕獲異常 ? try { ?把有風(fēng)險(xiǎn)的程序放在try塊中; ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? }catch(異常類 ?變量名){

? ? ? ? ? ? ? ? ?用catch塊擺放異常狀況處理程序剧董;} ? ? ? ? ? ? ? ?//常用e.printstackTrace()打印異常名+異常信息+異常位置

? ? ? ? ? ? ? ? finally{一定執(zhí)行代碼幢尚; ? 一般用于關(guān)閉資源

? ? ? ? ? ? ? }

注意:try{ }大括號(hào)里定義的變量,finall里不能調(diào)用

//雖然異常也具有多態(tài)翅楼,但應(yīng)該先抓小錯(cuò)再抓大錯(cuò)尉剩,因?yàn)橹苯幼ギ惓5母割悾赡軙?huì)搞不清到底在哪里出了錯(cuò)

? ? ? 在繼承樹上的層次越高毅臊,“籃子”也越大理茎,當(dāng)你沿著繼承樹往下走,異常類就會(huì)越來(lái)越有特定的取向管嬉,catch的“籃子”越來(lái)越小皂林,也就更容易確定是到底在哪里出了錯(cuò)誤


? ? ? ? ? 如果try的代碼沒出錯(cuò),則跳過catch繼續(xù)執(zhí)行蚯撩,如果try的代碼出錯(cuò)础倍,則只執(zhí)行catch內(nèi)容(出錯(cuò)代碼之后catch之前代碼不執(zhí)行),finally里面放的是不管出不出錯(cuò)都要執(zhí)行的代碼胎挎,如果try沟启,catch里有return語(yǔ)句,finally里的內(nèi)容一樣會(huì)執(zhí)行犹菇。

a德迹、finally中的代碼總是會(huì)執(zhí)行嗎?

答:no揭芍,如果一個(gè)方法內(nèi)在執(zhí)行try{}語(yǔ)句之前就已經(jīng)return了胳搞,那么finally語(yǔ)句指定不會(huì)執(zhí)行了。因?yàn)樗緵]有進(jìn)入try語(yǔ)句中

如果在一個(gè)try語(yǔ)句中調(diào)用System.exit(0);方法沼沈,那么就會(huì)退出當(dāng)前java虛擬機(jī),那么finally也就沒有執(zhí)行的機(jī)會(huì)了列另。

b页衙、finally在return之前執(zhí)行還是在return之后執(zhí)行

答:很多人可能會(huì)說在return執(zhí)行之前執(zhí)行艰躺。我的答案是在return中間執(zhí)行眨八,是不是很特別廉侧,請(qǐng)按下面的例子:


請(qǐng)問輸出的結(jié)果是多少呢段誊?

正確答案是:1

下面我來(lái)講解一下這個(gè)程序的執(zhí)行過程,

首先程序在執(zhí)行到try{}語(yǔ)句中的return方法后没陡,就會(huì)先返回相應(yīng)的值盼玄,并把相應(yīng)的值存儲(chǔ)在一個(gè)臨時(shí)棧中去保存這個(gè)結(jié)果潜腻。這時(shí)臨時(shí)棧中存儲(chǔ)的值為1。

但是程序不會(huì)立刻返回蝌箍,轉(zhuǎn)而回去執(zhí)行finally中的方法暴心,++x,在finally執(zhí)行完后专普,方法全部執(zhí)行完,這時(shí)會(huì)再次調(diào)用return方法筋粗,注意這時(shí)不在是返回值炸渡,而是告訴主調(diào)程序,被調(diào)程序已經(jīng)執(zhí)行完了买决,你可以接著去執(zhí)行你主程序的其它方法了。但是請(qǐng)注意嘁灯,此時(shí)返回的值還是原來(lái)保存在臨時(shí)

棧中的值1丑婿。


標(biāo)識(shí)異常

遇到throw 程序就結(jié)束了

人工拋出異常(JVM不認(rèn)為是錯(cuò)的没卸,但是不合乎清理) ?等同自定義異常


?//人工拋出異常后尘奏,當(dāng)運(yùn)行此方法或調(diào)用此方法的時(shí)候病蛉,程序會(huì)認(rèn)為這有一個(gè)錯(cuò)誤,必須throws或try catch

? ? ? ? ? ? 只有聲明了此處是一個(gè)需要捕獲的異常的時(shí)候俗孝,catch才能去抓住它魄健。類似于抓嫌疑人,只有嫌疑人被通緝的時(shí)候革骨,其它地方的警察才會(huì)知道這是一個(gè)嫌疑犯良哲,然后取抓它


創(chuàng)建用戶自定義異常類:必須繼承現(xiàn)有異常類 1.Exception ?2.RuntimeException常用

class ( ? ) extends(){


}

? ? ? ? ?創(chuàng)建自定義異常的步驟就是助隧,先創(chuàng)建一個(gè)異常類繼承原來(lái)的異常,然后在try catch中并村,用if判斷,如果出現(xiàn)這種情況哩牍,就標(biāo)識(shí)這個(gè)異常棚潦。和直接標(biāo)示異常原有異常相比的區(qū)別就是,打印的異常信息不同了瓦盛,打印出的是你自定義的異常類的信息洗显。 ?其它和拋出原有異常的效果一模一樣


面試題

舉出常用的五種運(yùn)行時(shí)異常

NullPointException空指針異常

ArithmeticException算術(shù)異常

IllegalArgumentException方法參數(shù)異常

ClassCastException類型強(qiáng)制轉(zhuǎn)換異常

IndexOutOfBoundsException:索引下標(biāo)越界異常

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末原环,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子处窥,更是在濱河造成了極大的恐慌嘱吗,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滔驾,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡哆致,警方通過查閱死者的電腦和手機(jī)绕德,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門耻蛇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人漱牵,你說我怎么就攤上這事夺蛇。” “怎么了闻镶?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵甚脉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我儒溉,道長(zhǎng)宦焦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任顿涣,我火速辦了婚禮波闹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘涛碑。我一直安慰自己精堕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布蒲障。 她就那樣靜靜地躺著歹篓,像睡著了一般瘫证。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庄撮,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天背捌,我揣著相機(jī)與錄音,去河邊找鬼洞斯。 笑死毡庆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的烙如。 我是一名探鬼主播么抗,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼亚铁!你這毒婦竟也來(lái)了蝇刀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤徘溢,失蹤者是張志新(化名)和其女友劉穎吞琐,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甸昏,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡顽分,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了施蜜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卒蘸。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖翻默,靈堂內(nèi)的尸體忽然破棺而出缸沃,到底是詐尸還是另有隱情,我是刑警寧澤修械,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布趾牧,位于F島的核電站,受9級(jí)特大地震影響肯污,放射性物質(zhì)發(fā)生泄漏翘单。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一蹦渣、第九天 我趴在偏房一處隱蔽的房頂上張望哄芜。 院中可真熱鬧,春花似錦柬唯、人聲如沸认臊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)失晴。三九已至剧腻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涂屁,已是汗流浹背书在。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胯陋,地道東北人蕊温。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓袱箱,卻偏偏與公主長(zhǎng)得像遏乔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子发笔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法盟萨,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法了讨,繼承相關(guān)的語(yǔ)法捻激,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,663評(píng)論 18 399
  • (一)Java部分 1前计、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,114評(píng)論 0 62
  • 通俗編程——白話JAVA異常機(jī)制 - 代碼之道胞谭,編程之法 - 博客頻道 - CSDN.NEThttp://blog...
    葡萄喃喃囈語(yǔ)閱讀 3,181評(píng)論 0 25
  • 總嘆流年短,常思日月長(zhǎng)男杈!歲寒磨去少年狂丈屹。經(jīng)歷百般風(fēng)雨,聯(lián)袂御凄涼伶棒。 本是同林鳥旺垒,終歸一陌桑。老來(lái)回首舊時(shí)光肤无。淚眼含...
    牧云軒閱讀 667評(píng)論 13 12
  • Ref: Redis in Action Redis是我在大約3年前為了解決一個(gè)實(shí)際問題而創(chuàng)造出來(lái)的:簡(jiǎn)單來(lái)說先蒋,當(dāng)...
    JackyBA閱讀 974評(píng)論 0 1