1. 程式人生 > 實用技巧 >異常——try、catch、finally、throw、throws

異常——try、catch、finally、throw、throws

異常(exception)就是程式在執行過程中發生的、破壞程式正常指令流的事件。

異常是物件,物件都要用類來定義。異常的根類是java.lang.Throwable。

常見異常:

ArrayIndexOutOfBoundsException  訪問陣列越界

InputMismatchException  輸入資料型別與宣告不匹配

FileNotFoundException  找不到指定檔案

ArithmeticException  數學運算異常

詳細參考部落格:https://blog.csdn.net/yuwenlanleng/article/details/84646448

丟擲異常有三種形式:①系統自動丟擲

throwthrows

①系統自動丟擲

 1   import java.util.Scanner;
 2   public class Test {
 3   
 4       public static void main(String[] args) {
 5           Scanner input =new Scanner(System.in);
 6           System.out.println("請輸入被除數:");
 7                  try {                     
 8                        int
num1=input.nextInt(); 9 System.out.println("請輸入除數:"); 10 int num2=input.nextInt(); 11 System.out.println(String.format("%d / %d = %d",num1, num2, num1 / num2)); 12 }catch (Exception e) { 13 System.err.println("出現錯誤:被除數和除數必須是整數,"+"除數不能為零。");
14 System.out.println(e.getMessage()); 15 } 16 } 17 }

執行結果:

System.err.println:輸出錯誤資訊,控制檯呈紅色。

當除數為0時,系統丟擲異常,然後轉而呼叫catch,catch捕捉到了異常進入catch內部。


throw

 1 import java.util.Scanner;
 2 public class Test {
 3     public static int quotient(int number1,int number2) {
 4         if(number1==0) 
 5             throw new ArithmeticException("除數不能為零") ;
 6         return number1 /number2;
 7     }
 8 
 9     public static void main(String[] args) {
10         Scanner input =new Scanner(System.in);
11         System.out.println("請輸入被除數:");
12                 try {                 
13                     int num1=input.nextInt();
14                     System.out.println("請輸入除數:");
15                     int num2=input.nextInt();
16                     int result=quotient(num1,num2);
17                     System.out.println(String.format("%d / %d = %d",num1, num2, result));
18                  }catch (ArithmeticException e) {
19                      System.err.println("出現錯誤:被除數和除數必須是整數,"+"除數不能為零。");
20                      System.out.println(e.getMessage());
21                  }     
22                 System.out.println("繼續...");
23     }
24 }

執行結果:

方法quotient來丟擲異常,該異常可以被呼叫者捕獲和處理。

throw語句的執行稱為丟擲一個異常,異常類是java.lang.ArithmeticException。

當異常被丟擲,正常的執行流程就被中斷,throw相當於呼叫catch塊,如果型別匹配則執行執行catch塊,執行完後不反回到throw語句,而是執行catch塊後的下一語句。


throws

throws就是宣告一系列可能丟擲的異常,多個異常逗號分開。

1 public static int quotient(int number1,int number2) throws ArithmeticException{
2         if(number1==0) 
3             throw new ArithmeticException("除數不能為零") ;
4         return number1 /number2;
5     }


丟擲多個異常的情況

 1 import java.util.InputMismatchException;
 2 import java.util.Scanner;
 3 
 4 public class Test {
 5 
 6     public static void main(String[] args) {
 7         Scanner input =new Scanner(System.in);
 8         System.out.println("請輸入被除數:");
 9                 try {                 
10                     int num1=input.nextInt();
11                     System.out.println("請輸入除數:");
12                     int num2=input.nextInt();
13                     System.out.println(String.format("%d / %d = %d",num1, num2, num1/num2));
14                  }catch (ArithmeticException e) {
15                      System.err.println("出現錯誤:"+"除數不能為零。");
16                      System.out.println(e.getMessage());
17                  }catch (InputMismatchException e) {
18                      System.err.println("出現錯誤:被除數和除數必須是整數,");
19                 }
20                 System.out.println("繼續...");
21     }
22 }

執行結果:


finally

不論異常是否產生,finally子句總是會被執行。