Java 可以利用例外處理的機制協助我們避開或是處理可能發生的錯誤~~

# 簡單的例外處理

我們可以使用 trycatch 分別執行程式碼與捕捉代表錯誤的物件,做一些例外的處理。

try{
    // 陳述句
}catch(例外型態 名稱){
    // 例外處理
}
範例程式碼
public class Average{
    public static void main(String[] args){
        Scanner console = new Scanner(System.in);
        double sum = 0;
        int cnt = 0;
        while(true)){
            try{
                int n = console.nextInt();
                if( n==0 )
                    break;
                sum+=n;
                cnt++;
            }catch(InputMismatchException ex){
                System.out.printf("略過的輸入為: %s\n",console.next());
            }
        }
        System.out.printf("輸入的平均為: %.2f\n",sum/cnt);
    }
}
範例輸入/出
10 20 3O 40 0
略過的輸入為: 3O
輸入的平均為: 23.33

從上述範例中, 3O 它並非數字,所以不會進入 try 區塊中做運算,反而到了 catch 區塊中受處理,所以我們能知道:
JVM 會嘗試執行 try 區塊中的程式碼,如果發生錯誤的話,就會跳離流程中的錯誤,然後再對比 catch 區塊中的宣告型態,如果一致的話,就會轉執行 catch 區塊中的程式碼。

# 受檢例外、執行例外

某些例外是可以被預期的,是硬體環境問題導致我們無法正確地取得資料,這種例外就叫做受檢例外,在我們進行編譯的時候,就會出現報錯給我們。

相對的,若是無法預期的例外,就稱作執行時期例外,編譯器本身不需要做處理,最後會交給 JVM 顯示例外堆疊訊息。

範例程式碼
public class Check{
    public static void main(String[] args){
        try{
            BuffereadyReader buf = new BuffereadyReader(System.in);
            System.out.print("請輸入整數");
            int n = Integer.parseInt(buf.readLine());
            System.out.println("輸入乘十等於: "+ (n*10) );
        }catch(IOException e){ // 受檢例外
            System.out.print("I/O 錯誤");
        }catch(NumberFormatException e){ // 執行期間例外
            System.out.print("輸入必須是整數");
        }
    }
}

若此時,將有 IOExceptioncatch 區塊拿掉會回報編譯錯誤,因為他是受檢例外

更新於 閱讀次數

用實際行動犒賞爆肝的我😀

Zrn Ye LinePay

LinePay