try{
//可能产生异常的代码(监控区域)
}catch(//异常类型+标识符){
//捕获异常并处理它(异常处理程序)
}
如果try代码没有异常,执行完try所有代码,不执行catch里的代码。
如果try里代码出现异常,try后续代码不执行。
如果catch捕获的异常类型错误(异常类型不是catch()里的类型),那么程序崩溃。
public class YiChang {
public static void main(String[] args) {
System.out.println("输入被除数:");
Scanner input=new Scanner(System.in);
int a=input.nextInt();
System.out.println("输入除数:");
int b=input.nextInt();
try {
int result=a/b;
System.out.println(a+"/"+b+"="+result);
}catch (ArithmeticException e){
System.out.println("输入非法数值0,无法进行计算");
}
System.out.println("谢谢使用");
}
}
可以多重catch,捕获不同的异常。
如果异常类之间有继承关系,在顺序安排上需注意。越是顶层的类,越放在下面,再不然就直接把多余的catch省略掉。 也就是先捕获子类异常再捕获父类异常。
finally:
有些语句,不管是否发生了异常,都必须要执行,那么就可以把这样的语句放到finally语句块中。
基本执行过程如下:
程序首先执行可能发生异常的try语句块。如果try语句没有出现异常则执行完后跳至finally语句块执行:如果try语句出现异常,则中断执行并根据发生的异常类型跳至相应的catch语句块执行处理。catch语句块可以有多个,分别捕获不同类型的异常。catch语句块执行完后程序会继续执行finally语句块。finally语句是可选的,如果有的话,则不管是否发生异常,finally语句都会被执行。
即使try和catch块中存在return语句,finally语句也会执行。
注意: 在finally块中不能抛出异常。
JAVA异常处理机制保证无论在任何情况下先执行finally块再离开try块,因此在try块中发生异常的时候,JAVA虚拟机先转到finally块执行finally中的代码,finally执行完毕后,再向外抛出异常。如果在finally中抛出异常,try捕捉的异常就不能抛出,外部捕捉到的异常就是finally中的异常信息,而try中发生的异常信息则丢失了。