Java 異常處理

主要兩類異常:

檢查性異常:也就是我們經(jīng)常遇到的IO異常端逼,以及SQL異常都是這種異常揖铜。對(duì)于這種異常,JAVA編譯器強(qiáng)制要求我們必需對(duì)出現(xiàn)的這些異常進(jìn)行catch困介。所以,面對(duì)這種異常不管我們是否愿意穷吮,只能自己去寫一大堆catch塊去處理可能的異常。

運(yùn)行時(shí)異常:我們可以不處理饥努。當(dāng)出現(xiàn)這樣的異常時(shí)捡鱼,總是由虛擬機(jī)接管。比如:我們從來(lái)沒有人去處理過NullPointerException異常酷愧,它就是運(yùn)行時(shí)異常驾诈,并且這種異常還是最常見的異常之一。

出現(xiàn)運(yùn)行時(shí)異常后溶浴,系統(tǒng)會(huì)把異常一直往上層拋乍迄,一直遇到處理代碼。如果沒有處理塊士败,到最上層闯两,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出谅将。拋出之后漾狼,如果是線程,這個(gè)線程也就退出了饥臂。如果是主程序拋出的異常逊躁,那么這整個(gè)程序也就退出了。運(yùn)行時(shí)異常是Exception的子類隅熙,也有一般異常的特點(diǎn)稽煤,是可以被Catch塊處理的。只不過往往我們不對(duì)他處理罷了囚戚。也就是說酵熙,你如果不對(duì)運(yùn)行時(shí)異常進(jìn)行處理,那么出現(xiàn)運(yùn)行時(shí)異常之后驰坊,要么是線程中止绿店,要么是主程序終止。

錯(cuò)誤 error:錯(cuò)誤不是異常,Error 用來(lái)指示運(yùn)行時(shí)環(huán)境發(fā)生的錯(cuò)誤假勿。



Exception 類的層次




Java 內(nèi)置異常類

?Java 的非檢查性異常


非檢查性異常


檢查性異常類

檢查性異常類

異常方法

?Throwable 類的主要方法:

?Throwable 類的主要方法:??


捕獲異常

try

? ? {

? ? ? ? // 程序代碼

? ? }catch(ExceptionName e1)

? ? {

? ? ? ? //Catch 塊

? ? }

Catch 語(yǔ)句包含要捕獲異常類型的聲明借嗽。當(dāng)保護(hù)代碼塊中發(fā)生一個(gè)異常時(shí),try 后面的 catch 塊就會(huì)被檢查转培。如果發(fā)生的異常包含在 catch 塊中恶导,異常會(huì)被傳遞到該 catch 塊


多重捕獲塊? finally關(guān)鍵字

try{

? // 程序代碼

}catch(異常類型1 異常的變量名1){

? // 程序代碼

}catch(異常類型2 異常的變量名2){

? // 程序代碼

} finally{

? // 程序代碼

}

上面的代碼段包含了 3 個(gè) catch塊。

可以在 try 語(yǔ)句后面添加任意數(shù)量的 catch 塊浸须。

如果保護(hù)代碼中發(fā)生異常惨寿,異常被拋給第一個(gè) catch 塊。

如果拋出異常的數(shù)據(jù)類型與 ExceptionType1 匹配删窒,它在這里就會(huì)被捕獲裂垦。

如果不匹配,它會(huì)被傳遞給第二個(gè) catch 塊肌索。

如此蕉拢,直到異常被捕獲或者通過所有的 catch 塊。

finally 關(guān)鍵字用來(lái)創(chuàng)建在 try 代碼塊后面執(zhí)行的代碼塊诚亚。

無(wú)論是否發(fā)生異常晕换,finally 代碼塊中的代碼總會(huì)被執(zhí)行。


throws/throw 關(guān)鍵字:?

如果一個(gè)方法沒有捕獲到一個(gè)檢查性異常站宗,那么該方法必須使用 throws 關(guān)鍵字來(lái)聲明闸准。throws 關(guān)鍵字放在方法簽名的尾部。

也可以使用 throw 關(guān)鍵字拋出一個(gè)異常梢灭,無(wú)論它是新實(shí)例化的還是剛捕獲到的夷家。

一個(gè)方法可以聲明拋出多個(gè)異常,多個(gè)異常之間用逗號(hào)隔開敏释。

import java.io.*;

public class className

{

? public void deposit(double amount) throws RemoteException,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? InsufficientFundsException

? {

? ? // Method implementation

? ? throw new RemoteException();

? }

? //Remainder of class definition

}



聲明自定義異常


如果希望寫一個(gè)檢查性異常類瘾英,則需要繼承 Exception 類。

如果你想寫一個(gè)運(yùn)行時(shí)異常類颂暇,那么需要繼承 RuntimeException 類缺谴。

class MyException extends Exception{
}


實(shí)例參考? 菜鳥教程Java異常

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市耳鸯,隨后出現(xiàn)的幾起案子湿蛔,更是在濱河造成了極大的恐慌,老刑警劉巖县爬,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阳啥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡财喳,警方通過查閱死者的電腦和手機(jī)察迟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門斩狱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人扎瓶,你說我怎么就攤上這事所踊。” “怎么了概荷?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵秕岛,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我误证,道長(zhǎng)继薛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任愈捅,我火速辦了婚禮遏考,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蓝谨。我一直安慰自己灌具,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布像棘。 她就那樣靜靜地躺著稽亏,像睡著了一般壶冒。 火紅的嫁衣襯著肌膚如雪缕题。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天胖腾,我揣著相機(jī)與錄音烟零,去河邊找鬼。 笑死咸作,一個(gè)胖子當(dāng)著我的面吹牛锨阿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播记罚,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼墅诡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了桐智?” 一聲冷哼從身側(cè)響起末早,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎说庭,沒想到半個(gè)月后然磷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡刊驴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年姿搜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寡润。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡舅柜,死狀恐怖梭纹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情业踢,我是刑警寧澤栗柒,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站知举,受9級(jí)特大地震影響瞬沦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雇锡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一逛钻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锰提,春花似錦曙痘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至谅年,卻和暖如春茧痒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背融蹂。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工旺订, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人超燃。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓区拳,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親意乓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子樱调,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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

  • 異常分類 Java將異常分為兩種,Checked異常和Runtime異常届良。Java認(rèn)為Checked異常都是可以在...
    LLorenzo閱讀 705評(píng)論 0 1
  • 來(lái)源:https://www.cnblogs.com/Qian123/p/5715402.html#_label0...
    Alex筆記閱讀 373評(píng)論 0 1
  • 今天我們來(lái)討論一下伙窃,程序中的錯(cuò)誤處理菩颖。 在任何一個(gè)穩(wěn)定的程序中,都會(huì)有大量的代碼在處理錯(cuò)誤为障,有一些業(yè)務(wù)錯(cuò)誤晦闰,我們可...
    Java耕耘者閱讀 1,044評(píng)論 0 4
  • 什么是異常放祟? 異常本質(zhì)上是程序上的錯(cuò)誤,錯(cuò)誤在我們編寫程序的過程中會(huì)經(jīng)常發(fā)生呻右,包括編譯期間和運(yùn)行期間的錯(cuò)誤跪妥。 編譯...
    若兮緣閱讀 3,338評(píng)論 0 11
  • 1.招親 遙遠(yuǎn)的天際淡藍(lán)如瀉,看不清的白云游走飄浮声滥,就像此刻的長(zhǎng)街一般眉撵,人心浮動(dòng)。大紅的綢子隨風(fēng)飄曳落塑,飄得人心癢癢...
    鳳曉寒閱讀 350評(píng)論 1 3