Java知多少(53)使用Java建立自己的異常子類

來源:互聯網
上載者:User

標籤:

儘管Java的內建異常處理大多數常見錯誤,你也許希望建立你自己的異常類型來處理你所應用的特殊情況。這是非常簡單的:只要定義Exception的一個子類就可以了(Exception當然是Throwable的一個子類)。你的子類不需要實際執行什麼——它們在類型系統中的存在允許你把它們當成異常使用。

Exception類自己沒有定義任何方法。當然,它繼承了Throwable提供的一些方法。因此,所有異常,包括你建立的,都可以獲得Throwable定義的方法。這些方法顯示在表10-3中。你還可以在你建立的異常類中覆蓋一個或多個這樣的方法。

表 10-3 Throwable 定義的方法
方法 描述
Throwable fillInStackTrace( ) 返回一個包含完整堆棧軌跡的Throwable對象,該對象可能被再次引發。
String getLocalizedMessage( ) 返回一個異常的局部描述
String getMessage( ) 返回一個異常的描述
void printStackTrace( ) 顯示堆棧軌跡
void printStackTrace(PrintStreamstream) 把堆棧軌跡送到指定的流
void printStackTrace(PrintWriterstream) 把堆棧軌跡送到指定的流
String toString( ) 返回一個包含異常描述的String對象。當輸出一個Throwable對象時,該方法被println( )調用


下面的例子聲明了Exception的一個新子類,然後該子類當作方法中出錯情形的訊號。它重載了toString( )方法,這樣可以用println( )顯示異常的描述。

 1 // This program creates a custom exception type. 2 class MyException extends Exception { 3     private int detail; 4     MyException(int a) { 5         detail = a; 6     } 7  8     public String toString() { 9         return "MyException[" + detail + "]";10     }11 }12 13 class ExceptionDemo {14     static void compute(int a) throws MyException {15         System.out.println("Called compute(" + a + ")");16        if(a > 10)17           throw new MyException(a);18        System.out.println("Normal exit");19     }20 21     public static void main(String args[]) {22        try {23            compute(1);24            compute(20);25         } catch (MyException e) {26             System.out.println("Caught " + e);27         }28     }29 }

該例題定義了Exception的一個子類MyException。該子類非常簡單:它只含有一個建構函式和一個重載的顯示異常值的toString( )方法。ExceptionDemo類定義了一個compute( )方法。該方法拋出一個MyException對象。當compute( )的整型參數比10大時該異常被引發。


main( )方法為MyException設立了一個例外處理常式,然後用一個合法的值和不合法的值調用compute( )來顯示執行經過代碼的不同路徑。下面是結果:
Called compute(1)
Normal exit
Called compute(20)
Caught MyException[20]

系列文章:

Java知多少(上)

Java知多少(39)interface介面

Java知多少(40)介面和抽象類別的區別

Java知多少(41)泛型詳解

Java知多少(42)泛型萬用字元和型別參數的範圍

Java知多少(43)異常處理基礎

Java知多少(44)異常類型

Java知多少(45)未被捕獲的異常

Java知多少(46)try和catch的使用

Java知多少(47)多重catch語句的使用

Java知多少(48)try語句的嵌套

Java知多少(49)throw:異常的拋出

Java知多少(50)Java throws子句

Java知多少(51)finally

Java知多少(52)內建異常

Java知多少(53)使用Java建立自己的異常子類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.