Java異常處理之throw, throws,try和catch


    程序運行過程中可能會出現異常情況,比如被0除、對負數計算平方根等,還有可能會出現致命的錯誤,比如內存不足,磁盤損壞無法讀取文件等,對於異常和錯誤情況的處理,統稱為異常處理。
    Java異常處理主要通過5個關鍵字控制:try、catch、throw、throws和finally。try的意思是試試它所包含的代碼段中是否會 發生異常;而catch當有異常時抓住它,並進行相應的處理,使程序不受異常的影響而繼續執行下去;throw是在程序中明確引發異常;throws的作 用是如果一個方法可以引發異常,而它本身並不對該異常處理,那么它必須將這個異常拋給調用它的方法;finally是無論發不發生異常都要被執行的代碼
   
    關鍵字:throw,throws,try和catch的用法如下:
        1、throws出現在方法的聲明中,表示該方法可能會拋出的異常,允許throws后面跟着多個異常類型
        2、throw出現在方法體中,用於拋出異常。當方法在執行過程中遇到異常情況時,將異常信息封裝為異常對象,然后throw。
        3、try出現在方法體中,它自身是一個代碼塊,表示嘗試執行代碼塊的語句。如果在執行過程中有某條語句拋出異常,那么代碼塊后面的語句將不被執行。
        4、catch出現在try代碼塊的后面,自身也是一個代碼塊,用於捕獲異常try代碼塊中可能拋出的異常。catch關鍵字后面緊接着它能捕獲的異常類型,所有異常類型的子類異常也能被捕獲。
       
    演示實例

 1 package book.exception;
 2 /**
 3  * 拋出異常和聲明異常
 4  * @author joe
 5  *
 6  */
 7 
 8 public class ThrowAndThrows {
 9     /**
10      * 計算一個數字的平方根
11      * @param nStr    以字符串的形式提供數字
12      * @return    返回平方根
13      * @throws Exception    當用戶輸入的字符串為空,
14      * 或者字符串無法轉換成數字,或者轉換成的數字小於0,都會拋出異常
15      */
16     public static double sqrt(String nStr) throws Exception {
17         if (nStr == null) {
18             //用trow關鍵字拋出異常,當異常被拋出時,程序會跳出該方法
19             throw new Exception("輸入的字符不能為空!");
20         }
21         double n = 0;
22         try {
23             n = Double.parseDouble(nStr);
24         } catch(NumberFormatException e) {
25             //將parseDouble方法可能拋出的異常NumberFormatException捕獲,
26             //然后將捕獲的異常重新封裝並輸出
27             throw new Exception("輸入的字符串必須能夠轉化成數字!", e);
28         }
29         if (n < 0 ){
30             throw new Exception("輸入的字符串轉化成的數字必須大於0!");
31         }
32         return Math.sqrt(n);
33     }
34     
35     public static void main(String[] args) throws Exception {
36         try{
37             ThrowAndThrows.sqrt("-124.56");
38         } catch(Exception e) {
39             //將sqrt方法聲明的可能拋出的Exception異常捕獲
40             //打印捕獲的異常的堆棧信息,從堆棧信息中可以發現異常發生的位置和原因
41             System.out.println("Got a Exception:" + e.getMessage());
42             e.printStackTrace();
43             throw e;    //不做進一步處理,將異常向外拋出
44         }
45         
46         //將sqrt聲明了可能會拋出的異常向外拋出,必須在方法聲明中使用throws
47         ThrowAndThrows.sqrt("-124.56");
48     }
49 
50 }

 

程序輸出結果:

 

1 Got a Exception:輸入的字符串轉化成的數字必須大於0!
2 java.lang.Exception: 輸入的字符串轉化成的數字必須大於0!
3     at book.exception.ThrowAndThrows.sqrt(ThrowAndThrows.java:30)
4     at book.exception.ThrowAndThrows.main(ThrowAndThrows.java:37)
5 Exception in thread "main" java.lang.Exception: 輸入的字符串轉化成的數字必須大於0!
6     at book.exception.ThrowAndThrows.sqrt(ThrowAndThrows.java:30)
7     at book.exception.ThrowAndThrows.main(ThrowAndThrows.java:37)

 

源碼分析:
    在main方法里,由於sqrt方法的聲明中有throws關鍵字,所以,在調用該方法時,必須對throws后面聲明的異常進行處置,處置的方法有兩種:
    (1)main方法處理該異常,使用try.....catch語句,將可能會出現的異常的代碼放在try塊內,將處理異常的代碼放在catch塊內,並指明catch能夠捕獲的異常的類型,當異常被捕獲時,執行catch塊內的語句。
    (2)main方法不處理該異常,將異常向外層程序拋出。在方法聲明中使用throws關鍵字拋出異常,方法體中不需要使用try...catch語句。
   
    異常類Exception的getMessage方法用來獲取一場的描述信息,printStackTrace方法用來打印異常的堆棧信息,通過堆棧信息能夠查明異常發生的原因和位置,在調試的時候常用。

轉載自:http://blog.csdn.net/zhouyong80/article/details/1907799

 


免責聲明!

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



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