异常处理--使用try,catch

来源:互联网 发布:ubuntu服务器下载文件 编辑:程序博客网 时间:2024/06/06 04:03

  程序中总避免不了出现各种意想不到的状况引发的错误,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区块.

0 0
原创粉丝点击