qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          Java異常的概念和分類

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

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

            設(shè)計良好地程序應(yīng)該在程序異常發(fā)生時提供處理這些錯誤的方法,使得程序不會因為異常的發(fā)生而阻斷或產(chǎn)生不可預(yù)見的結(jié)果。

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

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

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

            異常的分類:

            Error:稱為錯誤,由Java虛擬機生成并拋出,包括動態(tài)鏈接失敗,虛擬機錯誤等,程序?qū)ζ洳蛔鎏幚怼?/p>

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

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

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

            try語句:

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

            catch語句:

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

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

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

            printStackTrace()方法,用來跟蹤異常事件發(fā)生時執(zhí)行堆棧的內(nèi)容。

            finally語句:

            finally語句為異常處理提供一個統(tǒng)一的出口,使得在控制流程轉(zhuǎn)到程序的其他部分以前,能夠?qū)Τ绦虻臓顟B(tài)做統(tǒng)一的管理。

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

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

            1)關(guān)閉打開的文件

            2)刪除臨時文件

            3)……

            其中throw和throws的區(qū)別:

            1、throws關(guān)鍵字通常被應(yīng)用在聲明方法時,用來指定可能拋出的異常。多個異常可以使用逗號隔開。當(dāng)在住函數(shù)中調(diào)用該方法時,如果發(fā)生異常,就會將異常拋給指定異常對象。

            例如:

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

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

            例如:

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


              public class Captor {//創(chuàng)建類
           static int quotient(int x,int y) throws MyException{
            if(y<0){//判斷參數(shù)是否小于0
             throw new MyException("除數(shù)不能使負(fù)數(shù)");//異常信息
            }
            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算術(shù)異常
             System.out.println("除數(shù)不能為0");//輸出提示信息
            }catch(Exception e){//處理其他異常
             System.out.println("程序發(fā)生了其他異常");
            }
           }
          }</SPAN>



            異常的其他問題:

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

            聲明并拋出異常:

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





            自定義異常:

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

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

            2、在方法適當(dāng)?shù)奈恢蒙勺远x異常的實例,并用throw語句拋出。

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

            異常總結(jié):

            1、一個圖

            2、五個關(guān)鍵字

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

            4、異常和重寫的關(guān)系

























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


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


          網(wǎng)站導(dǎo)航:
           
          <2012年7月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 衡阳市| 临湘市| 兴文县| 丹东市| 无极县| 基隆市| 抚松县| 额敏县| 甘孜| 赣州市| 吴川市| 江安县| 湟源县| 库尔勒市| 承德县| 湘潭县| 平阴县| 团风县| 钟山县| 双桥区| 鹤峰县| 进贤县| 多伦县| 务川| 灵武市| 金堂县| 洮南市| 玉林市| 靖安县| 巴楚县| 安丘市| 和静县| 吉林省| 华宁县| 临安市| 宁明县| 武定县| 台东市| 富锦市| 垦利县| 青铜峡市|