JAVA異常處理流程理解


  異常處理是JAVA的一大特色,當虛擬機執行代碼出現異常的時候,會拋出相應的異常信息。理解虛擬機異常機制能夠讓我們可以更好的處理異常,不至於導致系統停止運行並可以呈現出友好的異常提示,還可以自己編寫異常類來處理相應的錯誤。

1.異常分類

                                              

由上圖所示,異常的基類為Throwable,Error、Exception為其子類。其中,Error經常用來用於表示系統錯誤或低層資源的錯誤,不是JAVA層面上能夠處理的,為不可捕捉異常。Exception中可以分為兩類,第一類為RunTimeException,這種異常可以捕捉也可以不捕捉,是運行時異常,例如數組越界、空指針異常;另一類為必須捕捉的異常,例如IOException、SQLException等異常。

2.異常的拋出和捕獲

  學習異常不外乎就是理解其異常是如何拋出的,還有是如何進行捕獲的,這其中包含了5個關鍵字:throws、throw、try、catch、finally.具體請看如下例程:

 1 package test;
 2 
 3 public class TestException {
 4 
 5     public static void main(String[] args) {
 6         TestException te = new TestException();
 7         try {
 8             te.method1();
 9         } catch (Exception e) {
10             e.printStackTrace();
11         }finally {
12             System.out.println("run finally code.");
13         }
14     }
15 
16     public void method1() throws Exception {
17         this.method2();
18         
19     }
20     public void method2() throws Exception {
21         this.method3();
22         
23     }
24     public void method3() throws Exception{
25         throw new Exception("Exception in method3");
26         
27     }
28 }

  其運行的流程圖為:

  首先,Method3函數使用關鍵字throw在方法體內拋出異常,然后在方法上throws Exception,這樣就是提示給調用該方法的代碼一個提示:運行這個方法會拋出異常,需要進行處理(可以繼續拋出或者進行捕獲處理);然后Method2方法內部調用Method3方法,不捕獲異常,則再次拋出異常,Method1方法內部調用Method2方法,依然不捕獲異常,又在方法名后方throws Exception,最終方法Main方法對Method1方法進行捕獲異常,使用try關鍵字包含會產生異常的代碼,隨后catch相應的異常做相應的處理,最終使用finally關鍵字執行后續代碼,無論是否捕捉到異常,fianlly中的代碼都會執行。

  這段代碼執行后控制台打印如下信息:

java.lang.Exception: Exception in method3
at test.TestException.method3(TestException.java:23)
at test.TestException.method2(TestException.java:19)
at test.TestException.method1(TestException.java:15)
at test.TestException.main(TestException.java:8)

  這段代碼模擬了一般出現異常的普遍現象,此方法將此 Throwable 對象的堆棧跟蹤輸出至錯誤輸出流,作為字段 System.err 的值。輸出的第一行包含此對象的 toString() 方法的結果。剩余行表示以前由方法 fillInStackTrace() 記錄的數據。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM