b47617

          攀登!進步!
          隨筆 - 20, 文章 - 1, 評論 - 0, 引用 - 0
          數據加載中……

          Java中的異常處理機制的簡單原理和應用~~

                JAVA程序違反了JAVA的語義規則時,JAVA虛擬機就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內置的語義檢查。例如數組下標越界,會引發IndexOutOfBoundsException;訪問null的對象時會引發 NullPointerException。另一種情況就是JAVA允許程序員擴展這種語義檢查,程序員可以創建自己的異常,并自由選擇在何時用 throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
          eg:第一種
          class Test{
                   public int devide(int x ,int y) throws Exception{  //
                            int result = x/y;
                            return result;
                   }         
          }
          class TestException{
                   public static void main(String[] args){
                            try{
                                     new Test().devide(3,0);
                            }catch(Exception e){
                                     System.out.println(e.getMessage());//雖然Exception除了Constructor之外沒有其它的函數,
          //但它繼承了Throwable類.
                              }
                            System.out.println("Program running here");
                   }
          }
          當編寫Test class不知道它是否拋出異常時,可以在devide methods方法后添加 throws Exception 就可以..而在TestException中必須處理拋出的異常.
          eg:第二種
          如果自己定義異常類,必須繼承Exception,也就是它的子類.
          class Test{
                   public int devide(int x ,int y) throws Exception{  //
                            if(y < 0) 
                                     throw DevideMyMinusException("devide is" + y);
                            int result = x/y;
                            return result;
                   }         
          }
          class DevideMyMinusException extends Exception{
                      public DevideMyMinusException (String msg){
                               super(msg);  //調用父類(Exception)的Construtor,主函數getMessage()輸出自定義的異常:"devide is..."
                      }
          }
          eg.第三種
          可以拋出多個異常類.
          class Test{
                   public int devide(int x ,int y) throws ArithmeticException,DevideMyMinusException{  //
                            if(y < 0) 
                                     throw new DevideMyMinusException("devide is" + y);
                            int result = x/y;
                            return result;
                   }         
          }
          class DevideMyMinusException extends Exception{
                      public DevideMyMinusException (String msg){
                               super(msg); 
                      }
          }

          class TestException{
                   public static void main(String[] args){
                            try{
                                     new Test().devide(3,-1);
                            }catch(ArithmeticException e){
                                     System.out.println("program running into ArithmeticException ");
                                     e.printStackTrace();
                            }catch(DevideMyMinusException e){
                                     System.out.println("program running into DevideMyMinusException");
                                     e.printStackTrace();
                            }catch(Exception e){
                                     System.out.println(e.getMessage)
                            )finally{
                                     System.out.println("finally running");//不管程序發生異常沒有,finally代碼塊都要執行.
                            }


                            System.out.println("Program running here");
                   }
          }
          1.程序根據異常類型的匹配.自動進入相應的catch語句.Exception應放在其它異常語句后,因為他們都繼承Exception ,其它異常要放在后面,就沒有什么意義了.
          2.try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,在return前還是后? 會執行,而且在return 前執行.
          3.什么時候finally里的代碼不會執行呢? 當出現System.exit(0);時,它不會執行,程序會退出.

          posted on 2006-03-04 02:30 原語 閱讀(1965) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 永安市| 卓资县| 当雄县| 五大连池市| 扶绥县| 贺兰县| 梨树县| 宜兰县| 蓬溪县| 鸡东县| 凯里市| 女性| 伊金霍洛旗| 文成县| 阆中市| 鹤壁市| 渑池县| 西充县| 隆回县| 吐鲁番市| 澄江县| 巴东县| 龙泉市| 大名县| 南川市| 大余县| 霍林郭勒市| 沂南县| 当阳市| 桓台县| 辽源市| 若尔盖县| 新蔡县| 长顺县| 根河市| 望江县| 西充县| 甘肃省| 阳原县| 葫芦岛市| 钟祥市|