請描述Java中異常處理機制的簡單原理和應用,並說明Error與Exception有什麼區別?

來源:互聯網
上載者:User

1:請描述Java中異常處理機制的簡單原理和應用,並說明Error與Exception有什麼區別。

每當產生異常後,如果沒有程式進行相應的處理,則程式會中斷的現象,那麼,此時實際上一旦產生一個異常之後,JVM會拋出一個異常類的執行個體化對象,如果此時使用了try語句進行捕獲的話,則可以進行異常處理,如果沒有的話,則交給JVM進行處理,當try語句捕獲到了異常之後,會與catch中的異常類型進行匹配,如果匹配成功,則使用此catch語句進行處理。

應用:簡單的應用,就是在所有throws關鍵字的地方加入try...catch
如果按照一個標準做法的話,try、catch、finally、throw、thorws關鍵字應該一起使用。

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);時,它不會執行,程式會退出.

 

 

Error和Exception的區別:

Java中的Error和Exception都是來之Throwable 這個Class的,是他的SubClass,

Error:是系統中的錯誤,程式員是不能改變,處理的,在程式編譯的時候出現的錯誤.只有通過修改程式才能修正Error.

Exception:是在程式啟動並執行時候捕捉的錯誤,是可以處理的異常.    

 文法是:try{}

          catch(Exception 名字){}                 

          finally

                  {進行資源的清理工作:  比如關閉開啟的檔案:    刪除臨時的檔案;   ....}

Exception:它也分兩種:RuntimeException(是經常出現的錯誤可以不catch)和其他Exception(是必須要catch的,這樣程式才能繼續,像某個方法裡面有throw IoException).

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.