异常的抛出与捕捉
一、异常的抛出
异常抛出后,如果不做任何处理,程序就会被终止。例如,以下将写一个关于a/b的除法代码,但由于b不能等于零,程序将会在出现异常处终止。
public class Demo1 {
public static void main(String[] args) {
System.out.println("欢迎来到除法世界!");
int a = 10;
int b = 0;
System.out.println(a / b);
}
}
运行结果为:
可以看到,第一条打印语句没有异常,所以程序打印了第一条语句"欢迎来到除法世界!",但当程序运行至第二条打印语句"a/b"时,由于系统无法判定b为零的情况,所以给出了异常:ArithmeticException: / by zero。
二、异常的捕捉
Java语言的异常捕获结构由try、catch、finally 3部分组成。其中,try语句块存放的是可能发生异常的Java语句;catch语句块在try语句块之后,用来激发被捕获的异常;finally语句块是异常处理结构的最后执行部分,无论catch语句块中的代码如何退出,都将执行finally语句块。
public class Demo1 {
public static void main(String[] args) {
try { //try语句块中包含可能出现异常的程序代码
System.out.println("欢迎来到除法世界!");
int a = 10;
int b = 0;
System.out.println(a / b);
}catch (Exception e){ //catch语句块用来激发被捕获的异常
e.printStackTrace(); //输出异常性质
}finally { //无论try-catch语句块是否顺利执行,都将执行finally语句块
System.out.println("还会再回来吗?");
}
}
}
运行结果:
三、注意事项
1. finally语句块未执行时
- 在finally语句块中发生了异常。
- 在前面的代码中使用了System.exit() 退出了程序。
- 程序所在线程死亡。
- 关闭CPU。
2.try-catch结果预想不一致
有时为了编程简单会忽略catch语句后的代码,这样try-catch语句就成了一种摆设,一旦程序在运行过程中出现异常,就会导致最终运行结果与期望的不一致,而错误发生的原因很难查找。因此要养成良好的编程习惯,最好在catch语句块中写入异常处理的代码。