异常处理--使用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);
    }
}

  正确输入每个整数,输出预期结果:
  
  异常处理--使用try,catch_第1张图片

  输入错误的话,
  异常处理--使用try,catch_第2张图片
 
  错误第一行,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);
    }
}

 执行结果为
  异常处理--使用try,catch_第3张图片

//执行完catch区块之后,由于还在while循环中,所以还可以继续下一个循环流程

try,catch总结

  运行程序时,JVM会尝试执行try区块中的程序代码,如果发生错误,执行程序会跳离错误发生点,然后比较catch括号中声明的类型,是否符合被抛出的错误对象类型,如果是的话,就执行catch区块中的程序代码,执行完并不会再返回try区块.

你可能感兴趣的:(Java学习)