Java基礎知識系列(一)異常

什么是異常?

先看一段代碼

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int a = scanner.nextInt();
    System.out.println("a = "+a);
}

這段代碼的執(zhí)行結果是

2
a = 2

如果我們輸入不是整型數(shù)2澜倦,而是一個字符串"abc",那么它的執(zhí)行結果是

abc
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at com.dd299.imserver.ExceptionTest.main(ExceptionTest.java:17)

在這里庄蹋,程序出了錯,沒有返回我們期望的結果形式卓箫,而是打印出一堆錯誤信息载矿。這種情況,就叫做異常烹卒。
從上面的例子可以看出闷盔,在java中,異常就是程序的一些錯誤旅急。

異常和哪些錯誤有關逢勾?

  1. 用戶輸入錯誤
  2. 設備錯誤
  3. 物理限制
  4. 代碼錯誤

在java中,所有的異常對象都是繼承于Throwable類的一個實例藐吮。事實上溺拱,直接繼承自Throwable的類只有兩個:Exception和Error。

  • Error:主要描述系統(tǒng)內部錯誤和資源耗盡的錯誤谣辞,是脫離程序員控制的問題迫摔。
  • Exception:是我們常說的異常,程序員可以通過優(yōu)化代碼的方式避免它潦闲。異常又分成兩類:
    • 運行時異常(RuntimeException):指在編譯期間無法發(fā)現(xiàn)的異常攒菠,在Java語言規(guī)范中,將派生于RuntimeException和Error的所有異常稱為未檢查異常歉闰。包含下面幾種情況:
      • 錯誤的類型轉換
      • 數(shù)組訪問越界
      • 訪問空指針
    • 已檢查異常:指編譯時就可以發(fā)現(xiàn)的異常。包含的情況有:
      • 試圖在文件尾部后面讀取數(shù)據(jù)
      • 試圖打開一個錯誤格式的URL
      • 試圖根據(jù)給定的字符串查找Class對象卓起,而這個字符串表示的類并不存在和敬。

一句永遠正確的話:“如果出現(xiàn)了RuntimeException,那一定就是你的問題”。


處理異常都有哪幾種方式

面對出錯的情況一向都是兩種處理角度戏阅,一種就是自己將錯誤處理掉昼弟;另一種是將錯誤信息拋出去,告知調用方奕筐,等待處理舱痘。相應的变骡,處理異常也一樣有兩種方式:

  • try/catch塊:捕獲異常
  • throws Exception,...:聲明已檢查異常。

聲明已檢查異常

對于一個已知有可能拋出異常的方法芭逝,需要在方法聲明時同時聲明可能會拋出的異常

public void function() throws Exception{
    exp();
}
publi void exp() throws Exception{
}

這種情況塌碌,往往是在代碼中調用了一個同樣聲明了異常的方法。
另外對于自定義異常旬盯,java不會拋出開發(fā)者自定義的異常台妆,這時開發(fā)者要自行拋出。

public void exp(String input) throws XXXException{
    ...
    if("a".equal.(input)){
        throw new XXXException();
    }
}

如何捕獲異常胖翰?

在上面的例子中接剩,除了將異常拋出去之外,還可以自行處理萨咳,這就需要捕獲異常懊缺。下面的代碼說明了一個典型的捕獲異常的情況

public void function() {
    try{
        exp();//(1)
    }
    catch(XXXException xxxe){
    ...//(2)
    }
    catch(Exception e){
    ...//(3)
    }
    
    
}
publi void exp() throws Exception{
}

上面的例子中,如果exp()沒有出現(xiàn)錯誤培他,那么程序執(zhí)行完try中的代碼鹃两,就自動結束,不會調用catch中的代碼靶壮;在try中一旦出現(xiàn)了catch對應的異常怔毛,就會停止當前的執(zhí)行,跳到對應的catch中執(zhí)行腾降;如果出現(xiàn)了異常拣度,但在catch中沒找到對應的處理,就退出螃壤。


Finally子句

Finally子句是用來處理那些不論有沒有發(fā)生異常抗果,都要處理的情況,比如說資源的釋放奸晴。

InputStream in = ...;
try{
...
}
finally{
in.close;
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末冤馏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子寄啼,更是在濱河造成了極大的恐慌逮光,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墩划,死亡現(xiàn)場離奇詭異涕刚,居然都是意外死亡,警方通過查閱死者的電腦和手機乙帮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進店門杜漠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事驾茴∨握粒” “怎么了?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵锈至,是天一觀的道長晨缴。 經(jīng)常有香客問我,道長裹赴,這世上最難降的妖魔是什么喜庞? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮棋返,結果婚禮上延都,老公的妹妹穿的比我還像新娘。我一直安慰自己睛竣,他們只是感情好晰房,可當我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著射沟,像睡著了一般殊者。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上验夯,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天猖吴,我揣著相機與錄音,去河邊找鬼挥转。 笑死海蔽,一個胖子當著我的面吹牛,可吹牛的內容都是我干的绑谣。 我是一名探鬼主播党窜,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼借宵!你這毒婦竟也來了幌衣?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤壤玫,失蹤者是張志新(化名)和其女友劉穎豁护,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欲间,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡择镇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了括改。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖嘱能,靈堂內的尸體忽然破棺而出吝梅,到底是詐尸還是另有隱情,我是刑警寧澤惹骂,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布苏携,位于F島的核電站,受9級特大地震影響对粪,放射性物質發(fā)生泄漏右冻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一著拭、第九天 我趴在偏房一處隱蔽的房頂上張望纱扭。 院中可真熱鬧,春花似錦儡遮、人聲如沸乳蛾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肃叶。三九已至,卻和暖如春十嘿,著一層夾襖步出監(jiān)牢的瞬間因惭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工绩衷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蹦魔,地道東北人。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓唇聘,卻偏偏與公主長得像版姑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子迟郎,可洞房花燭夜當晚...
    茶點故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內容