異常——try、catch、finally、throw、throws
阿新 • • 發佈:2020-07-30
異常(exception)就是程式在執行過程中發生的、破壞程式正常指令流的事件。
異常是物件,物件都要用類來定義。異常的根類是java.lang.Throwable。
常見異常:
ArrayIndexOutOfBoundsException 訪問陣列越界
InputMismatchException 輸入資料型別與宣告不匹配
FileNotFoundException 找不到指定檔案
ArithmeticException 數學運算異常
詳細參考部落格:https://blog.csdn.net/yuwenlanleng/article/details/84646448
丟擲異常有三種形式:①系統自動丟擲 ② throw③throws
①系統自動丟擲
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 intnum1=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子句總是會被執行。