throws,throw,try,catch,finally 分別表明什麼意義

JAVA 語言如何進行異常處理,關鍵字: throws,throw,try,catch,finally 分java

別表明什麼意義?在 try 塊中能夠拋出異常嗎?這裏面參考博文源碼分析

package com.yuan.test;

public class TestThrowable {
	    /**
	     * 計算一個數字的平方根
	     * @param nStr    以字符串的形式提供數字
	     * @return    返回平方根
	     * @throws Exception    當用戶輸入的字符串爲空,
	     * 或者字符串沒法轉換成數字,或者轉換成的數字小於0,都會拋出異常
	     */
	    public static double sqrt(String nStr) throws Exception {
	        if (nStr == null) {
	            //用trow關鍵字拋出異常,當異常被拋出時,程序會跳出該方法
	            throw new Exception("輸入的字符不能爲空!");
	        }
	        double n = 0;
	        try {
	            n = Double.parseDouble(nStr);
	        } catch(NumberFormatException e) {
	            //將parseDouble方法可能拋出的異常NumberFormatException捕獲,
	            //而後將捕獲的異常從新封裝並輸出
	            throw new Exception("輸入的字符串必須可以轉化成數字!", e);
	        }
	        if (n < 0 ){
	            throw new Exception("輸入的字符串轉化成的數字必須大於0!");
	        }
	        return Math.sqrt(n);
	    }
	    
	    public static void main(String[] args) throws Exception {
	        try{
	        	TestThrowable.sqrt("-124.56");
	        } catch(Exception e) {
	            //將sqrt方法聲明的可能拋出的Exception異常捕獲
	            //打印捕獲的異常的堆棧信息,從堆棧信息中能夠發現異常發生的位置和緣由
	            System.out.println("Got a Exception:" + e.getMessage());
	            e.printStackTrace();
	            throw e;    //不作進一步處理,將異常向外拋出
	        }
	        
	        //將sqrt聲明瞭可能會拋出的異常向外拋出,必須在方法聲明中使用throws
	      System.out.println(TestThrowable.sqrt("-124.56"));
	    }

	}

源碼分析:
    在main方法裏,因爲sqrt方法的聲明中有throws關鍵字,這是由於方法中有throw異常方法,而且沒有對方法進行try...catch 操做。spa

throw new Exception("輸入的字符不能爲空!");

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

相關文章
相關標籤/搜索