qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          Java異常的概念和分類

            java異常是java提供的用于處理程序中錯誤的一種機制。

            所謂錯誤是指在程序運行的過程中發生的一些異常事件(如:除0溢出,數組下標越界,所要讀取的文件不存在)。

            設計良好地程序應該在程序異常發生時提供處理這些錯誤的方法,使得程序不會因為異常的發生而阻斷或產生不可預見的結果。

            Java程序的執行過程中如出現異常事件,可以生成一個異常類對象,該異常對象封裝了異常事件的信息,并將被提交給java運行時系統,這個過程稱為拋出(throw)異常。

            當Java運行時系統接收到異常對象時,會尋找能處理這一異常的代碼并把當前異常對象交給其處理,這一過程稱為捕獲(catch)異常。

            try里面放的是有可能發生錯誤的語句,catch里面放的是發生異常之后采取的措施。

            異常的分類:

            Error:稱為錯誤,由Java虛擬機生成并拋出,包括動態鏈接失敗,虛擬機錯誤等,程序對其不做處理。

            Exception:所有異常類的父類,其子類對應了各種各樣的可能出現的異常事件,一般需要用戶顯示的聲明或捕獲。

            Runtime Exception:一類特殊的異常,如被0除、數組下標超范圍等,其產生比較頻繁,處理麻煩,如果顯示的聲明或捕獲將會對程序可讀性和運行效率影響很大。因此由系統自動檢測并將它們交給缺省的異常處理程序(用戶可不必對其處理)。

            其實異常部分主要講的就是五個關鍵字:try、catch、finally、throw、throws。

            try語句:

            try{……}語句制定了一段代碼,這段代碼就是一次鋪貨并處理例外的范圍。在執行過程中,該段代碼可能會產生并拋出一種或幾種類型的異常對象,它后面的catch語句要分別對這些異常做相應的處理。如果沒有例外發生,所有的catch代碼段都被略過不執行。

            catch語句:

            在catch語句塊中是對異常進行處理的代碼,每個try語句塊可以伴隨一個或多個catch語句,用于處理可能產生的不同類型的異常對象。

            在catch中聲明的異常對象(catch(SomeException e))封裝了異常事件發生的信息,在catch語句塊中可以使用這個對象的一些方法獲取這些信息。

            例如:getMessage()方法,用來得到有關異常事件的信息。

            printStackTrace()方法,用來跟蹤異常事件發生時執行堆棧的內容。

            finally語句:

            finally語句為異常處理提供一個統一的出口,使得在控制流程轉到程序的其他部分以前,能夠對程序的狀態做統一的管理。

            無論try所指定的程序塊中是否拋出例外,finally所指定的代碼都要執行。

            通常在finally語句中可以進行資源的清除工作,如:

            1)關閉打開的文件

            2)刪除臨時文件

            3)……

            其中throw和throws的區別:

            1、throws關鍵字通常被應用在聲明方法時,用來指定可能拋出的異常。多個異常可以使用逗號隔開。當在住函數中調用該方法時,如果發生異常,就會將異常拋給指定異常對象。

            例如:

          <SPAN style="FONT-SIZE: 18px">public class test {
           static void pop() throws NegativeArraySizeException{
            //定義方法并拋出NegativeArraySizeException
            int[] arr=new int[-3];//創建數組
           }
           public static void main(String[] args)//主方法
           {
            try{
             pop();//調用pop()方法
            }catch(NegativeArraySizeException e){
             System.out.println("pop()方法拋出的異常");//輸出異常信息
            }
           }
          }</SPAN>

            2、throw關鍵字通常用在方法體中,并且拋出一個異常對象。程序在執行到throw語句時立即停止,它后面的語句都不執行。通常throw拋出異常后,如果想在上一級代碼中來捕獲并處理異常,則需要在拋出異常的方法中使用throws關鍵字在方法聲明中指明要拋出的異常;如果要捕獲throw拋出的異常,則必須使用try{}catch{}語句。

            例如:

          <SPAN style="FONT-SIZE: 18px">public class MyException extends Exception{//創建自定義異常類
            String message;//定義String類型變量
            public MyException(String ErrorMessage){//父類方法
             message=ErrorMessage;
            }
            public String getMessage()//覆蓋getMessage()方法
            {
             return message;
            }
           }


              public class Captor {//創建類
           static int quotient(int x,int y) throws MyException{
            if(y<0){//判斷參數是否小于0
             throw new MyException("除數不能使負數");//異常信息
            }
            return x/y;//返回值
           }
           
           public static void main(String[] args)//主方法
           {
            try{
             int result=quotient(3,-1);
            }catch(MyException e){//處理自定義異常
             System.out.println(e.getMessage());//輸出異常信息
            }catch(ArithmeticException e){
             //輸出ArithmeticException算術異常
             System.out.println("除數不能為0");//輸出提示信息
            }catch(Exception e){//處理其他異常
             System.out.println("程序發生了其他異常");
            }
           }
          }</SPAN>



            異常的其他問題:

            注:上圖灰色部分為打印出來的堆棧錯誤信息

            聲明并拋出異常:

            重寫方法需要拋出與原方法所拋出異常類型一致異常或不拋出異常。





            自定義異常:

            使用自定義異常一般有如下步驟:

            1、通過繼承java.lang.Exception類聲明自己的異常類。

            2、在方法適當的位置生成自定義異常的實例,并用throw語句拋出。

            3、在方法的聲明部分用throws語句聲明該方法可能拋出的異常。

            異常總結:

            1、一個圖

            2、五個關鍵字

            3、先捕獲小的異常,在捕獲大的異常

            4、異常和重寫的關系

























          posted on 2012-07-30 10:49 順其自然EVO 閱讀(1240) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 灵璧县| 柳州市| 阳高县| 舒城县| 河间市| 阜阳市| 江源县| 深州市| 彩票| 黎川县| 育儿| 巴林右旗| 琼中| 庄河市| 甘孜县| 遵义市| 恭城| 乌审旗| 绥棱县| 广西| 会宁县| 永靖县| 余干县| 通江县| 民丰县| 额敏县| 沂水县| 永胜县| 于都县| 望江县| 汝城县| 全椒县| 和田市| 垣曲县| 雷波县| 五莲县| 文昌市| 裕民县| 香港 | 武夷山市| 隆安县|