標籤:unknown ror int 做了 程式 nbsp 輸出 final 包含
異常是程式中的一些錯誤,但並不是所有的錯誤都是異常,並且錯誤有時候是可以避免的。
比如說,你的代碼少了一個分號,那麼運行出來結果是提示是錯誤 java.lang.Error;如果你用System.out.println(11/0),那麼你是因為你用0做了除數,會拋出 java.lang.ArithmeticException 的異常。
捕獲異常
使用 try 和 catch 關鍵字可以捕獲異常。try/catch 代碼塊放在異常可能發生的地方。
try/catch代碼塊中的代碼稱為保護代碼,使用 try/catch 的文法如下:
try{ // 程式碼}catch(ExceptionName e1){ //Catch 塊}
Catch 語句包含要捕獲異常類型的聲明。當保護代碼塊中發生一個異常時,try 後面的 catch 塊就會被檢查。
如果發生的異常包含在 catch 塊中,異常會被傳遞到該 catch 塊,這和傳遞一個參數到方法是一樣。
執行個體
下面的例子輸入一個數字,並與100相除。當輸入的不是數字或者輸入0時就會拋出異常
public static void main(String[] args) { try{ System.out.println("請輸入一個數字"); Scanner sc=new Scanner(System.in); String line=sc.nextLine(); int no=Integer.parseInt(line);//將String型轉換成int型 double div=100/no;//與100相除 } catch(Exception e){ e.printStackTrace();//輸出異常 } }
運行結果
請輸入一個數字0//當輸入0時java.lang.ArithmeticException: / by zero at demo0103.Test.main(Test.java:40)請輸入一個數字ads//輸入的不是數字時java.lang.NumberFormatException: For input string: "ads" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(Unknown Source) at demo0103.Test.main(Test.java:39)
throws/throw 關鍵字:
如果一個方法沒有捕獲一個檢查性異常,那麼該方法必須使用 throws 關鍵字來聲明。throws 關鍵字放在方法簽名的尾部。
也可以使用 throw 關鍵字拋出一個異常,無論它是新執行個體化的還是剛捕獲到的。
下面還是看“輸入一個數字,並與100相除”
import java.util.Scanner;public class Test { public static double Test() throws Exception{//throws表示沒有捕獲異常,誰調用此方法誰再捕獲 System.out.println("輸入數字:"); int no=0;double div=0; Scanner sc=new Scanner(System.in); String s=sc.nextLine(); no=Integer.parseInt(s); div=100/no; return div; } public static void main(String[] args) { try{ double d=Test();//調用Test方法,必須運行try/catch代碼塊 System.out.println(d); } catch(Exception e){ e.printStackTrace(); } }
程式運行結果與上例相同。
finally關鍵字
finally 關鍵字用來建立在 try 代碼塊後面執行的代碼塊。
無論是否發生異常,finally 代碼塊中的代碼總會被執行。
在 finally 代碼塊中,可以運行清理類型等收尾善後性質的語句。
finally 代碼塊出現在 catch 代碼塊最後,文法如下:
try{// 程式碼}catch(Exception 異常的變數名){
// 程式碼
}finally{
// 程式碼
}
還是那個執行個體
public static void main(String[] args) { try{ System.out.println("請輸入一個數字"); Scanner sc=new Scanner(System.in); String line=sc.nextLine(); int no=Integer.parseInt(line); double div=100/no; } catch(Exception e){ //System.out.println("出錯了"); //System.out.println(e.getMessage()); e.printStackTrace(); } finally{//無論是否發生異常,finally 代碼塊中的代碼總會被執行。 System.out.println("這塊代碼總會執行"); } }
運行結果
請輸入一個數字0這塊代碼總會執行java.lang.ArithmeticException: / by zero at demo0103.Test.main(Test.java:34)
Java 異常處理