異常

看個圖
異常.png
異常分類
運行時異常
  • 定義:是指編譯器不要求強制處置的異常。一般是指編程時的邏輯錯誤痰腮,是程序員應(yīng)該積極避免出現(xiàn)的異常。java.lang.RuntimeException類及它的子類都是運行時異常明棍。對于這類異常攒菠,可以不作處理,因為這類異常很普遍茎活,若全處理可能會對程序的可讀性和運行效率產(chǎn)生影響
編譯時異常
  • 定義:是指編譯器要求必須處置的異常昙沦。即程序在運行時由于外界因素造成的一般性異常。編譯器要求Java程序必須捕獲或聲明所有編譯時異常载荔。對于這類異常盾饮,如果程序不處理,可能會帶來意想不到的結(jié)果。
異常處理機制
try-catch-finally語句
  • 用法
try{
  ...... //可能產(chǎn)生異常的代碼
 }
 catch( ExceptionName1 e ){
  ...... //當(dāng)產(chǎn)生ExceptionName1型異常時的處置措施
 }
 catch( ExceptionName2 e ){
  ...... //當(dāng)產(chǎn)生ExceptionName2型異常時的處置措施
 }
 finally{
  ...... //無論是否發(fā)生異常丘损, 都無條件執(zhí)行的語句
 }
  • 說明:如果明確知道產(chǎn)生的是何種異常普办,可以用該異常類作為catch的參數(shù);也可 以用其父類作為catch的參數(shù)徘钥。比如可 以 用 ArithmeticException 類 作 為 參 數(shù) 的 地 方 衔蹲, 就 可 以 用RuntimeException類作為參數(shù),或者用所有異常的父類Exception類作為參數(shù)呈础。但不能是與ArithmeticException類無關(guān)的異常舆驶,如NullPointerException(catch 中的語句將不會執(zhí)行)

  • 捕獲異常的有關(guān)信息:與其它對象一樣,可以訪問一個異常對象的成員變量或調(diào)用它的 方法

    • getMessage()獲取異常信息而钞,返回字符串

    • printStackTrace()獲取異常類名和異常信息贞远,以及異常出現(xiàn)在程序中的位置。返回值void

    • 示意圖:

    異常示例.png
  • finally : 捕獲異常的最后一步是通過finally語句為異常處理提供一個統(tǒng)一的出口笨忌,使得在控制流轉(zhuǎn)到程序的其它部分以前,能夠?qū)Τ绦虻臓顟B(tài)作統(tǒng)一的管理.不論在try代碼塊中是否發(fā)生了異常事件俱病,catch語句是否執(zhí)行官疲,catch語句是否有異常,catch語句中是否有return亮隙,finally塊中的語句都會被執(zhí)行

  • finally語句和catch語句是任選的

  • 如圖:

異常示例2.png
  • 前面使用的異常都是RuntimeException類或是它的子類途凫,這些類的異常的特 點是:即使沒有使用try和catch捕獲,Java自己也能捕獲溢吻,并且編譯通過 ( 但運行時會發(fā)生異常使得程序運行終止 )

  • 如果拋出的異常是IOException等類型的非運行時異常维费,則必須捕獲,否則 編譯錯誤促王。也就是說犀盟,我們必須處理編譯時異常,將異常進行捕捉蝇狼,轉(zhuǎn)化為 運行時異常

處理異常的第二種方式---聲明拋出異常 throws
  • 含義:如果一個方法(中的語句執(zhí)行時)可能生成某種異常阅畴,但是并不能確定如何處理這 種異常,則此方法應(yīng)顯示地聲明拋出異常迅耘,表明該方法將不對這些異常進行處理贱枣, 而由該方法的調(diào)用者負責(zé)處理

  • 用法:在方法聲明中throws語句可以聲明拋出異常的列表,throws后面的異常類型可 以是方法中產(chǎn)生的異常類型颤专,也可以是它的父類

  • 如圖:

    throw拋出異常.png
  • 重寫方法不能拋出比被重寫方法范圍更大的異常類型
手動拋出異常
  • 含義:Java異常類對象除在程序執(zhí)行過程中出現(xiàn)異常時由系統(tǒng)自動生成并拋出纽哥,也可根據(jù)需要 使用人工 創(chuàng)建并拋出

  • 用法

    • 首先要生成異常類對象,然后通過throw語句實現(xiàn)拋出操作(提交給Java運 行環(huán)境
        IOException e = new IOException();
        throw e;
  • 可以拋出的異常必須是Throwable或其子類的實例栖秕。下面的語句在編譯時將 會產(chǎn)生語法錯誤
         throw new String("want to throw");
自定義異常類
  • 用法: 選擇一個合適的父類春塌,提供一個 serialVersionUID

  • 如圖:

自定義異常類.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谈息,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子屎飘,更是在濱河造成了極大的恐慌蛤高,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吕世,死亡現(xiàn)場離奇詭異彰触,居然都是意外死亡,警方通過查閱死者的電腦和手機命辖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門况毅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尔艇,你說我怎么就攤上這事尔许。” “怎么了终娃?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵味廊,是天一觀的道長。 經(jīng)常有香客問我棠耕,道長余佛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任窍荧,我火速辦了婚禮辉巡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕊退。我一直安慰自己郊楣,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布瓤荔。 她就那樣靜靜地躺著净蚤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茉贡。 梳的紋絲不亂的頭發(fā)上塞栅,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音腔丧,去河邊找鬼放椰。 笑死,一個胖子當(dāng)著我的面吹牛愉粤,可吹牛的內(nèi)容都是我干的砾医。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼衣厘,長吁一口氣:“原來是場噩夢啊……” “哼如蚜!你這毒婦竟也來了压恒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤错邦,失蹤者是張志新(化名)和其女友劉穎探赫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撬呢,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡伦吠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了魂拦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毛仪。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芯勘,靈堂內(nèi)的尸體忽然破棺而出箱靴,到底是詐尸還是另有隱情,我是刑警寧澤荷愕,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布衡怀,位于F島的核電站,受9級特大地震影響安疗,放射性物質(zhì)發(fā)生泄漏狈癞。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一茂契、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧慨绳,春花似錦掉冶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至战秋,卻和暖如春璧亚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背脂信。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工癣蟋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狰闪。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓疯搅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親埋泵。 傳聞我的和親對象是個殘疾皇子幔欧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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