1. 程式人生 > >Java異常----自定義異常類(throw和throws關鍵字的用法)

Java異常----自定義異常類(throw和throws關鍵字的用法)

Java的異常處理的五個關鍵字, trycatchfinallythrowthrows 的關係:

處理異常方式: 1  try-catch  捕獲到異常後在catch中進行處理

                          2  throws    在方法的開始出throws異常,呼叫該方法的地方處理該異常


一個方法在宣告時可以使用throws宣告丟擲所要產生的若干個異常,並在該方法的方法體中具體給出產生異常的操作。

•使用者定義的異常同樣要用try--catch捕獲,但必須由使用者自己丟擲 throw new MyException()。 •異常是一個類,使用者定義的異常必須直接或間接繼承自Throwable或Exception類,建議用Exception
類。
例如:
  1. package com.mys.ajax;  
  2. /**自定義異常類, 
  3.  * 當方法傳遞的是負數是發生MyException 
  4.  */
  5. publicclass MyException extends Exception {  
  6.     String message;  
  7.     public MyException(int n) {  
  8.         message = n+"不是正數";  
  9.     }  
  10.     public String getMessage() {  
  11.         return message;  
  12.     }  
  13.     publicvoid
     setMessage(String message) {  
  14.         this.message = message;  
  15.     }  
  16. }  
  1. package com.mys.ajax;  
  2. publicclass TestMyException {  
  3.     publicvoid check(int n) throws MyException{  
  4.         if(n<0){  
  5.             thrownew MyException(n);//丟擲異常,結束方法check()時執行
  6.         }  
  7.         double number = Math.sqrt(n);  
  8.         System.out.println(n+"的平方根是"+number);  
  9.     }  
  10.     publicstaticvoid main(String[] args) {  
  11.         TestMyException test = new TestMyException();  
  12.         try {  
  13.             test.check(8);//一般在最後呼叫該法的的方法(如main)體中處理異常
  14.             test.check(-2);  
  15.         } catch (MyException e) {//必須要捕獲異常
  16.             // TODO Auto-generated catch block
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
  20. }  

執行結果如下:

com.mys.ajax.MyException: -2不是正數
at com.mys.ajax.TestMyException.check(TestMyException.java:7)
at com.mys.ajax.TestMyException.main(TestMyException.java:18)
8的平方根是2.8284271247461903

自定義異常還可以是多個:


以下是分享網友的:

  1. /*  
  2. 異常練習1 
  3. */
  4. class NoValueException extends Exception  
  5. {  
  6.     NoValueException(String msg)  
  7.     {  
  8.         super(msg);  
  9.     }  
  10. }  
  11. interface Shape  
  12. {  
  13.     void getArea();  
  14. }  
  15. class Rec implements Shape  
  16. {  
  17.     privateint len , wid;  
  18.     Rec(int len , int wid) throws NoValueException  
  19.     {  
  20.         if( len <= 0 || wid <= 0)  
  21.             thrownew NoValueException("出現非法值!");  
  22.         this.len = len;  
  23.         this.wid = wid;  
  24.     }  
  25.     publicvoid getArea()  
  26.     {  
  27.         System.out.println(len*wid);  
  28.     }  
  29. }  
  30. class ExceptionTest  
  31. {  
  32.         publicstaticvoid main(String [] args)  
  33.         {  
  34.             try
  35.             {  
  36.                 Rec r = new Rec(-3,4);  
  37.                 r.getArea();      
  38.             }  
  39.             catch ( NoValueException e)  
  40.             {  
  41.                 System.out.println(e.toString());  
  42.             }  
  43.             System.out.println("Over");  
  44.         }         
  45. }  

  1. /*  
  2. 異常練習2 
  3. */
  4. class NoValueException extends RuntimeException  
  5. {  
  6.     NoValueException(String msg)  
  7.     {  
  8.         super(msg);  
  9.     }  
  10. }  
  11. interface Shape  
  12. {  
  13.     void getArea();  
  14. }  
  15. class Rec implements Shape  
  16. {  
  17.     privateint len , wid;  
  18.     Rec(int len , int wid) //throws NoValueException
  19.     {  
  20.         if( len <= 0 || wid <= 0)  
  21.             thrownew NoValueException("出現非法值!");  
  22.         this.len = len;  
  23.         this.wid = wid;  
  24.     }  
  25.     publicvoid getArea()  
  26.     {  
  27.         System.out.println(len*wid);  
  28.     }  
  29. }  
  30. class ExceptionTest  
  31. {  
  32.         publicstaticvoid main(String [] args)  
  33.         {  
  34.                 Rec r = new Rec(-3,4);  
  35.                 r.getArea();      
  36.             System.out.println("Over");  
  37.         }         
  38. }