異常處理(二)--java19(22/12/2015)

二譬正、如何處理Exception的異常
java提供的是異常處理的抓拋模式
1."拋":當我們執(zhí)行代碼時簇捍,一旦出現(xiàn)異常划滋,就會在異常的代碼處生成一個對應的異常處理對象扑媚,并將此對象拋出腰湾。(自動拋出/手動拋出)
>一旦拋出此類異常對象,那么程序就終止執(zhí)行疆股。
>此異常類的對象拋給方法的調(diào)用者檐盟。
2."抓":抓住上一步拋出來的異常類的對象。如何抓押桃?即為異常處理的方式。
java提供了兩種方式用來處理一個異常類的對象导犹。
處理的方式一:
try{
//可能出現(xiàn)異常的代碼
}catch(Exception1 e1){
//處理的方式1
}catch(Exception2 e2){
//處理的方式2
}finally{
//一定要執(zhí)行的代碼
}

注:1.try內(nèi)聲明的變量唱凯,類似于局部變量,出了try{}語句谎痢,就不能被調(diào)用
2.finally是可選的磕昼。
3.catch語句內(nèi)部是對異常對象的處理:(右鍵try-catch)
>getMessage();(獲取message)
>printStackTrace();(打印出異常的堆棧信息)
>也可以自己定義打印节猿;System.out.println("出現(xiàn)異常了");
4.可以有多個catch語句票从,try中拋出的異常類對象從上往下去匹配catch中的異常類的類型漫雕,
一旦滿足就執(zhí)行catch中的代碼。執(zhí)行完峰鄙,就跳出其后的多條catch語句
5.如果異常處理了浸间,那么其后的代碼繼續(xù)執(zhí)行。
6.若catch中多個異常類型是“并列”關(guān)系吟榴,孰上孰下都可以魁蒜。
若catch中多個異常類型是“包含”關(guān)系,須將子類放在父類上面吩翻,進行處理兜看。否則報錯!
7.finally中存放的是一定會被執(zhí)行的代碼狭瞎。不管try中细移、catch中是否仍有異常未被處理,以及是否有return語句熊锭。
8.try—catch是可以嵌套的

三弧轧、對于運行時異常來說,可以不顯示的進行處理球涛。
對于編譯時異常來說劣针,必須要顯示的進行處理。

public class TestException1 {

    //1.數(shù)組下標越界異常ArrayIndexOutOfBoundsException(*自己定義異常打印輸出*)
        @Test
        public void test2(){
            try{
            int[] i = new int[10];
            System.out.println(i[10]);
            }catch(Exception e){
                System.out.println("出現(xiàn)了數(shù)組下標越界異常");
            }
        }
    
        //2.算數(shù)異常:ArithmeticException(*打印出堆棧信息*)
        @Test//右鍵-surround with-try/catch
        public void test3(){
            try {
                int i = 9;
                System.out.println(i/0);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        //3.類型轉(zhuǎn)換異常:ClassCastException(*多個catch時亿扁,只執(zhí)行一個*)
        @Test
        public void test4(){
            try {
                Object obj = new Date();
                String str = (String) obj;//編譯沒有錯誤捺典,因為str以為自己將obj字符串轉(zhuǎn)換。
            } catch(ClassCastException e){
                System.out.println("出現(xiàn)類型轉(zhuǎn)換異常了");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        //4.空指針異常:NullPointerException(*其后的代碼順利執(zhí)行*)
        @Test
        public void test5(){
            Person p = new Person();
            try {
                p = null;//一旦定義為空从祝。襟己。。
                System.out.println(p.toString());
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            System.out.println("hello牍陌!美眉擎浴!");
            
        }
//---------------------------------------------------------
        //編譯時異常
        //一共三處異常,兩種類型
        //new FileInputStream是 FileNotFoundException毒涧;
        //fis.read()是IOException贮预;
        //fis.close();也是IOException;
        //注:FileNotFoundException是IOException的子類
        @Test
        public void test6(){
            FileInputStream fis = null;
            try {
                fis = new FileInputStream(new File("hello.txt"));
                int b;
                while ((b = fis.read())!= -1) {
                    System.out.println((char)b);
                }
            // fis.close();這個語句在catch之外契讲,如果出現(xiàn)異常仿吞,直接退出,
            // 這條語句可能不被執(zhí)行捡偏,占用系統(tǒng)稀有資源唤冈,所以必須要被執(zhí)行,所以最好放到finally中
            } catch (FileNotFoundException e1) {
                System.out.println(e1.getMessage());
            } catch (IOException e1) {
                System.out.println(e1.getMessage());
            }finally{
                try {
                    fis.close();//放過來以后也有可能發(fā)生異常银伟,可以再抓拋一次你虹,fis沒有定義會報錯
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        
        }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绘搞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子傅物,更是在濱河造成了極大的恐慌夯辖,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挟伙,死亡現(xiàn)場離奇詭異楼雹,居然都是意外死亡,警方通過查閱死者的電腦和手機尖阔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門贮缅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人介却,你說我怎么就攤上這事谴供。” “怎么了齿坷?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵桂肌,是天一觀的道長。 經(jīng)常有香客問我永淌,道長崎场,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任遂蛀,我火速辦了婚禮谭跨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘李滴。我一直安慰自己螃宙,他們只是感情好,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布所坯。 她就那樣靜靜地躺著谆扎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪芹助。 梳的紋絲不亂的頭發(fā)上堂湖,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音状土,去河邊找鬼无蜂。 笑死,一個胖子當著我的面吹牛声诸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播退盯,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼彼乌,長吁一口氣:“原來是場噩夢啊……” “哼泻肯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起慰照,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤灶挟,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后毒租,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體稚铣,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年墅垮,在試婚紗的時候發(fā)現(xiàn)自己被綠了惕医。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡算色,死狀恐怖抬伺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灾梦,我是刑警寧澤峡钓,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站若河,受9級特大地震影響能岩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜萧福,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一拉鹃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧统锤,春花似錦毛俏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至逾雄,卻和暖如春阀溶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸦泳。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工银锻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人做鹰。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓击纬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钾麸。 傳聞我的和親對象是個殘疾皇子更振,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法炕桨,類相關(guān)的語法,內(nèi)部類的語法肯腕,繼承相關(guān)的語法献宫,異常的語法,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 初識異常(Exception) 比如我們在取數(shù)組里面的某個值得時候实撒,經(jīng)常會出現(xiàn)定義的取值范圍超過了數(shù)組的大小姊途,那么...
    iDaniel閱讀 1,869評論 1 2
  • 通俗編程——白話JAVA異常機制 - 代碼之道,編程之法 - 博客頻道 - CSDN.NEThttp://blog...
    葡萄喃喃囈語閱讀 3,179評論 0 25
  • 在集成微信支付時才發(fā)現(xiàn)微信的開發(fā)文檔果然有些坑知态,本文主要是記錄我在區(qū)分微信支付回調(diào)問題的處理捷兰。也讓遇到同樣問題的小...
    Perry_we閱讀 6,675評論 3 10