黑馬程序員_java_面向對象_異常

  ------- android培訓java培訓、期待與您交流! ----------


異常:
是什麼? 是對問題的描述。將問題進行對象的封裝。




--------------------------------------




異常體系
Throwable
|---Error
|---Exception
|--RuntimeException


異常體系的特點:異常體系中的所有類以及對象都具備可拋性。
也就是說可以被throw和throws關鍵字所操作。
只有異常體系具備這個特點。




--------------------------------------




throw和throws的用法:


throw定義在函數上,用於拋出異常對象
throws定義在函數上,用於拋出異常類。可以拋出多個用逗號個隔開。


當函數內容有throw拋出異常對象,並未進行try處理,必須要在函數上聲明,都在編譯失敗。
注意,RuntimeException除外,也就說,函數內如果拋出的RuntimeException異常看,函數上不可以聲明


如果函數聲明瞭異常,調用者需要進行處理,處理方法可以throw可以try.




--------------------------------------




異常有兩種:
編譯是被檢測到的異常
該異常在編譯時,如果沒有處理(沒有拋也沒有try),編譯失敗。
該異常被標識,代表這可以被處理。
運行時異常(編譯時不檢測)
在編譯時,不需要處理,編譯器不檢查。
該異常的發生,建議不處理,讓程序停止,需要對代碼進行修正。




--------------------------------------




異常處理語句:
try {
需要檢測的代碼;
} catch() {
處理異常的代碼;
} finally {
一定會執行的代碼
}


有三種結合方式
1, try {

} catch() {


}


2, try {


} finally {


}


3, try {


} catch() {


} finally {


}




注意:
1,finally中定義的通常是關閉資源管理代碼,因爲資源必須釋放。
2,finally只有一種情況不會執行,當執行到System.exit(0);finally不會執行。(因爲System.exit(0),代表JVM退出




--------------------------------------




自定義異常:
定義類繼承Exception或者RuntimeException
1,爲了讓該自定義類具備可拋性。
2,讓該類具備操作異常的共性方法。

當要自定義異常的信息是,可以使用父類已經定義好的功能,
將異常信息傳遞給父類的構造函數。  示例如下:
class MyException extends Exception{
MyException(String mas) {
super(mas);
}
}


自定義異常,按照java的面向對象思想,將程序何總出現的特有問題進行封裝。




--------------------------------------




異常的好處:
1,將問題繼續封裝。
2,將正常的流程代碼和問題處理代碼相分離,方便於閱讀。


異常的處理原則:
1,處理方式有兩種:try或者throws。
2,調用到拋出異常的功能時,拋出幾個,就處理幾個。
一個try可以對用多個catch
3,多個catch,父類的catch放到最下面。
4,catch內,需要定義針對性的處理方式,不要簡單的定義printStackTrace;輸出語句。也不要不寫。
  當捕獲到的異常,本功能處理不了時,可以繼續在catch中拋出。     示例:
try {
throw new AException;
} catch(AException e) {
throw e
}


如果該異常處理不了。但並不屬於該功能出現的異常。
可以將異常轉換後,再拋出和該功能相關的異常。


或者異常可以處理,當需要將異常產生的和本功能相關的問題提供出去。
讓調用者知道,並處理,也可以將捕獲異常處理後,轉換新的異常。
try {
throw new AException();
} catch(AException e) {
//對AException進行處理。
throw new BException(); //異常轉換。
}






異常的注意事項:
在子父類覆蓋時:
1,子類拋出的異常必須是父類異常的子類或者子集。
2,如果父類或者接口沒有異常拋出時,子類覆蓋出現異常,只能try不能拋


/*
        老師帶電腦上課
        通過名詞提練法,發現有電腦類和老師類兩個類
        
        經分析。電腦類會有可能出現異常
        可能出現的異常是
                電腦藍屏
                電腦冒煙
        經分析:電腦可能會在運行過程中發生異常。
        所以在電腦運行時捕捉異常
        
        經分析。電腦冒煙老師解決不了,報告自己上司也不行
        所以準備拋出自己的異常類。那就是課時無法進行

*/

//定義一個電腦藍屏異常類
class LanPingException extends Exception {


        LanPingException(String mas) {
                super(mas);
        }


}


//定義一個電腦異常冒煙類
class MaoYanException extends Exception {


        MaoYanException(String mas) {
                super(mas);
        }


}


//課時無法進行異常類
class NoPlanException extends Exception {
        
        NoPlanException(String mas) {
                super(mas);
        }
        
}


//定義一個電腦類
class Computer {
        
        private int a; //定義一個電腦狀態值,1:爲正常運行。2:爲藍屏。3:爲冒煙
        //運行函數
        public void run(int a) throws LanPingException, MaoYanException {
                System.out.println("電腦開始運行"); //如果狀態是1,電腦正常運行
                if(a == 2)
                        throw new LanPingException("電腦藍屏了"); //假如狀態是2.電腦藍屏
                else if(a == 3)
                        throw new MaoYanException("電腦冒煙了"); //假如狀態是3,電腦冒煙
        }
        
        //重啓函數
        public void reset() throws NoPlanException {
                System.out.println("電腦重啓");
                try {
                        run(3);
                } catch(LanPingException e) {
                        reset(); //假如電腦藍屏了,就把電腦重啓
                } catch(MaoYanException e) {
                        System.out.println(e.toString());
                        throw new NoPlanException("課時無法進行");
                }
        }
        
}


//定義一個老師類
class Teacher {
        
        private String name;
        private Computer comp;
        //寫一個構造函數。可以指定老師的名字
        Teacher(String name) {
                this.name = name;
                comp = new Computer();
        }
        
        //老師講課的函數
        public void jiangKe() throws NoPlanException {
                try {
                        comp.run(2);
                } catch(LanPingException e) {
                        System.out.println(e.toString()); //打印電腦出什麼錯誤了
                        comp.reset(); //假如電腦藍屏了,就把電腦重啓
                } catch(MaoYanException e) {
                        throw new NoPlanException("課時無法進行");
                }
                        System.out.println("上課");
        }
        
}


//運行測試類
class ExceptionDemo4 {
        public static void main(String[] args) throws NoPlanException {
                Teacher t = new Teacher("畢老師");
                try {
                        t.jiangKe();
                } catch(NoPlanException e) {
                        System.out.println(e.toString());
                        System.out.println("畢老師去休息。讓張老師上陣");
                        Teacher t1 = new Teacher("張老師");
                        try {
                                t1.jiangKe();
                        } catch(NoPlanException el) {
                                System.out.println("老師有事,今天放假");
                        }
                }
        }
}

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------


詳細請查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章