異常處理--使用try,catch

  程序中總避免不了出現各種意想不到的狀況引發的錯誤,java中的錯誤以對象方式呈現爲java.lang.Throwable的各種子類實例.
  只要我們能捕捉包裝錯誤的對象,就可以針對改錯誤做一些處理,如,試恢復正常流程,進行日誌記錄,以某種形式提醒用戶.

話不多說,下來我們看一個簡單的例子!

1.用戶可以連續輸入整數,最後輸入0結束後會顯示輸入數的平均值

package dongmengyuan;

/**
 * Created by dongmengyuan on 16-11-23.
 */

import java.util.Scanner;

public class Average {
    public static void main(String[] args) {
        Scanner input  = new Scanner(System.in);
        double sum = 0;
        int count = 0;
        while(true) {
            int number = input.nextInt();
            if(number  == 0) {
                break;
            }
            sum += number;
            count++;
        }
        System.out.printf("平均 %.2f%n",sum/count);
    }
}

  正確輸入每個整數,輸出預期結果:
  
  這裏寫圖片描述

  輸入錯誤的話,
  這裏寫圖片描述
 
  錯誤第一行,Exception in thread “main” java.util.InputMismatchException.
  Scanner對象的nextInt()方法,可以將用戶輸入的下一個字符串剖析爲int值,出現這個錯誤信息,表示不符合Scanner對象預期.

  java中所有錯誤都被打包爲對象,我們可以用try,catch代表錯誤對象後做出處理.

package dongmengyuan;

/**
 * Created by dongmengyuan on 16-11-23.
 */

import java.util.*;

public class Average3 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        double sum = 0;
        int count = 0;
        while(true) {
            try {
                int number = input.nextInt();
                if(number == 0) {
                    break;
                }
                sum += number;
                count++;
            }
            catch (InputMismatchException ex) {
                System.out.printf("略過非整數輸入 %s%n",input.next());
            }
        }
        System.out.printf("平均 %.2f%n",sum/count);
    }
}

 執行結果爲
  這裏寫圖片描述

//執行完catch區塊之後,由於還在while循環中,所以還可以繼續下一個循環流程

try,catch總結

  運行程序時,JVM會嘗試執行try區塊中的程序代碼,如果發生錯誤,執行程序會跳離錯誤發生點,然後比較catch括號中聲明的類型,是否符合被拋出的錯誤對象類型,如果是的話,就執行catch區塊中的程序代碼,執行完並不會再返回try區塊.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章