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