Java基礎(chǔ)知識(shí)8-異常處理

配圖

異常概述

異常是運(yùn)行是在代碼序列中引起的非正常情況.換句話說(shuō),異常是運(yùn)行時(shí)錯(cuò)誤.
Java異常是用來(lái)描述在一段代碼中發(fā)生的異常情況(也就是錯(cuò)誤)的對(duì)象.當(dāng)出現(xiàn)引起異常的情況時(shí),就會(huì)創(chuàng)建用來(lái)表示異常的對(duì)象,并在引起錯(cuò)誤的方法中拋出異常對(duì)象.
方法可以選擇自己處理異常,也可以繼續(xù)傳遞異常.

異常類型

所有異常類型都是內(nèi)置類Throwable的子類.Throwable位于異常類層次中的頂部.緊隨Throwable之下的兩個(gè)子類,它們將異常分為兩個(gè)不同的分支.
一個(gè)分支是Exception類,這個(gè)類既可以用于用戶程序應(yīng)當(dāng)捕獲的異常情況,也可以用于創(chuàng)建自定義異常類型的子類.Exception有一個(gè)重要的子類,名為RuntimeException.
另一個(gè)分支是Error類,該類定義了在常規(guī)環(huán)境下不希望有程序捕獲的異常.Error類型的異常有Java運(yùn)行時(shí)系統(tǒng)使用,指運(yùn)行環(huán)境本身出現(xiàn)了某些錯(cuò)誤.

未捕獲的異常

int d = 0;
int a = 42 / d;

上述語(yǔ)句執(zhí)行時(shí),系統(tǒng)檢測(cè)到試圖除以零時(shí),它會(huì)構(gòu)造一個(gè)新的異常對(duì)象,然后拋出異常java.lang.ArithmeticException: / by zero如果沒(méi)有即時(shí)捕獲處理,程序會(huì)立即終止運(yùn)行.

捕獲異常

使用try和catch來(lái)捕獲異常.

try {
   int d = 0;
   int a = 42 / d;
} catch (Exception e){
   System.out.println("程序出現(xiàn)了異常");
}

這個(gè)時(shí)候你就會(huì)發(fā)現(xiàn),程序并沒(méi)有終止運(yùn)行,而是執(zhí)行了catch代碼中的代碼.

自己處理異常有兩個(gè)優(yōu)點(diǎn):
1.允許修復(fù)錯(cuò)誤.
2.阻止程序自動(dòng)終止.

多條catch字句

try {
    int d = 0;
    int a = 42 / d;
} catch (Exception e){
    System.out.println("Exception");
} catch (ArithmeticException ae){
    System.out.println("ArithmeticException");
}

上面我只是舉了一個(gè)例子,如果程序先捕獲了第一個(gè)catch的異常,那么程序不回再去捕獲第二個(gè)catch的異常,以此類推.
我這是在舉例子,因?yàn)镋xception是所有異常的父類所以絕對(duì)不可能后捕獲ArithmeticException異常的.

手動(dòng)拋出異常

使用throw關(guān)鍵字.

try {
   throw new ArithmeticException();
}  catch (ArithmeticException ae){
   System.out.println("ArithmeticException");
}

上述代碼中我們手動(dòng)拋出了ArithmeticException異常,而Java中所有異常都是對(duì)象.所以我們要?jiǎng)?chuàng)建ArithmeticException對(duì)象并拋出.

引發(fā)異常但不處理

使用throws關(guān)鍵字

public void testMethod() throws ArithmeticException {

}

上述代碼我們的這個(gè)方法執(zhí)行的時(shí)候發(fā)生了異常,但是我們不做處理,并且將異常向上拋(拋給調(diào)用此方法的方法).

如果我們的方法中使用了自定義異常類,那么我們也需要向上拋出.

自定義異常類

class TestExcption extends Exception{
    public TestExcption(){}
    public TestExcption(String info){
        super(info);
    }
}

throw和throws的區(qū)別

1.throws使用在函數(shù)上.
???throw使用在函數(shù)內(nèi).
2.throws拋出的是異常類,可以拋出多個(gè),用逗號(hào)隔開.
???throw拋出的是異常對(duì)象.

finally

使用finally可以創(chuàng)建一個(gè)代碼塊,改代碼塊會(huì)在執(zhí)行try/catch代碼塊之后,并在執(zhí)行try/catch代碼塊后面的代碼之前執(zhí)行.也就是說(shuō) 不管是否有異常拋出,都會(huì)執(zhí)行finally代碼塊.

try{
            
} catch (Exception e) {
            
} finally {
            
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末檬果,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌唠梨,老刑警劉巖句喜,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡畔勤,警方通過(guò)查閱死者的電腦和手機(jī)胯陋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蕊温,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人遏乔,你說(shuō)我怎么就攤上這事义矛。” “怎么了盟萨?”我有些...
    開封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵凉翻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我捻激,道長(zhǎng)制轰,這世上最難降的妖魔是什么前计? 我笑而不...
    開封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮艇挨,結(jié)果婚禮上残炮,老公的妹妹穿的比我還像新娘。我一直安慰自己缩滨,他們只是感情好势就,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著脉漏,像睡著了一般苞冯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侧巨,一...
    開封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天舅锄,我揣著相機(jī)與錄音,去河邊找鬼司忱。 笑死皇忿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的坦仍。 我是一名探鬼主播鳍烁,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼繁扎!你這毒婦竟也來(lái)了幔荒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梳玫,失蹤者是張志新(化名)和其女友劉穎爹梁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體提澎,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姚垃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盼忌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片积糯。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碴犬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情梆暮,我是刑警寧澤服协,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站啦粹,受9級(jí)特大地震影響偿荷,放射性物質(zhì)發(fā)生泄漏窘游。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一跳纳、第九天 我趴在偏房一處隱蔽的房頂上張望忍饰。 院中可真熱鬧,春花似錦寺庄、人聲如沸艾蓝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赢织。三九已至,卻和暖如春馍盟,著一層夾襖步出監(jiān)牢的瞬間于置,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工贞岭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留八毯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓瞄桨,卻偏偏與公主長(zhǎng)得像话速,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讲婚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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

  • Java異常類型 所有異常類型都是Throwable的子類尿孔,Throwable把異常分成兩個(gè)不同分支的子類Erro...
    予別她閱讀 932評(píng)論 0 2
  • 通俗編程——白話JAVA異常機(jī)制 - 代碼之道,編程之法 - 博客頻道 - CSDN.NEThttp://blog...
    葡萄喃喃囈語(yǔ)閱讀 3,181評(píng)論 0 25
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法筹麸,類相關(guān)的語(yǔ)法活合,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法物赶,異常的語(yǔ)法白指,線程的語(yǔ)...
    子非魚_t_閱讀 31,664評(píng)論 18 399
  • 這是我最近讀精英日課的感想 人類社會(huì)有三條鏈: 食物鏈 智識(shí)鏈 幸福鏈 知道這三條鏈,結(jié)合現(xiàn)今受人驅(qū)使的經(jīng)歷酵紫。我發(fā)...
    我的頭很方閱讀 169評(píng)論 0 2
  • # 一級(jí)標(biāo)題
    2bcf7d9ff110閱讀 149評(píng)論 1 1