[]你必须要知道的Java 异常的捕获与处理(详解附源码)

一、异常的产生
异常是程序之中导致程序中断的一种指令流 , 异常一旦出现并且没有进行合理处理的话 , 那么程序就将中断执行 。
下面 , 通过两个程序来进行异常产生问题的对比 。
(1)不产生异常的程序:public class Test {public static void main(String args[]) {System.out.println("1、除法计算开始 。");int result = 10 / 2;System.out.println("2、除法计算结果:" + result);System.out.println("3、除法计算结束 。");}}
运行结果:1、除法计算开始 。2、除法计算结果:53、除法计算结束 。
(2)产生异常的程序public class Test {public static void main(String args[]) {System.out.println("1、除法计算开始 。");int result = 10 / 0; // 会出现错误System.out.println("2、除法计算结果:" + result);System.out.println("3、除法计算结束 。");}}
运行结果:1、除法计算开始 。Exception in thread "main" java.lang.ArithmeticException: / by zeroat Test.main(Test.java:4)
一旦产生异常 , 我们发现产生异常的语句以及之后的语句将不再执行 , 默认情况下是进行异常信息的输出 , 而后自动结束程序的执行 。
现在 , 我们要做的是:即使程序出现了异常 , 也要让程序正确的执行完毕 。
二、异常的处理
如果希望程序出现异常之后程序依然可以正常的完成的话 , 那么就可以使用如下的格式进行异常的处理:try {可能出现异常的语句 ;} [ catch (异常类型 异常对象) {处理异常 ;} catch (异常类型 异常对象) {处理异常 ;} ... ] [finally {不管是否出现异常 , 都执行此代码 ;}]
现在 , 使用以上的操作处理异常处理前面除法于是出现的异常:public class Test {public static void main(String args[]) {System.out.println("1、除法计算开始 。");try {int result = 10 / 0; // 异常System.out.println("2、除法计算结果:" + result); // 之前语句有异常 , 此语句不再执行} catch (ArithmeticException e) {System.out.println(e); // 异常处理:输出错误信息 , java.lang.ArithmeticException:/ by zero}System.out.println("3、除法计算结束 。");}}
运行结果:1、除法计算开始 。java.lang.ArithmeticException: / by zero3、除法计算结束 。
可以发现 , 加入了异常处理之后 , 程序中即使有了异常 , 程序也可以正常的执行完毕 , 但是异常处理时的错误输出信息和之前相比 , 出错的信息不明确了 , 那么为了让错误的信息更加的完整 , 一般都会调用printStackTrace()方法进行异常信息的打印 , 这个方法打印的异常信息是最完整的:public class Test {public static void main(String args[]) {System.out.println("1、除法计算开始 。");try {int result = 10 / 0; // 异常System.out.println("2、除法计算结果:" + result); // 之前语句有异常 , 此语句不再执行} catch (ArithmeticException e) {e.printStackTrace(); // 异常处理:输出错误信息}System.out.println("3、除法计算结束 。");}}
运行结果:1、除法计算开始 。java.lang.ArithmeticException: / by zeroat Test.main(Test.java:5)3、除法计算结束 。
此时发现 , 打印的信息是很完整的 。
除了try…catch格式处理异常外 , 还可以使用try…catch..finally:public class Test {public static void main(String args[]) {System.out.println("1、除法计算开始 。");try {int result = 10 / 1;System.out.println("2、除法计算结果:" + result);} catch (ArithmeticException e) {e.printStackTrace();} finally {System.out.println("不管是否出现异常都执行");}System.out.println("3、除法计算结束 。");}}
运行结果:1、除法计算开始 。2、除法计算结果:10不管是否出现异常都执行3、除法计算结束 。


推荐阅读