[]你必须要知道的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、除法计算结束 。
推荐阅读
- 电脑数码精通|夏季如何让电脑的故障率降到最低?早知道早做准备吧
- 戏说新金融|你从借呗借的那些钱来自哪里,你知道吗?“借呗”的那些事“借呗”的钱从哪来?
- |搭建Prometheus平台,你必须考虑的6个因素
- IT168|都知道vivo X50Pro稳 想不到夜拍才是杀手锏
- 未来科技圈|618不知道怎么选购笔记本电脑 主流轻薄高性能游戏本推荐
- 小阳说科技|不知道这3个功能,你八成是个假“果粉”
- GaGaHi|全球最火的8个海外社交平台,你知道几个?
- 冬季初雪|烟草局三年后年薪15万,不及互联网企业?网友:还有不知道的收入
- 燕七TB|给宝马做汽车音响的牌子你可以知道,小小挂脖蓝牙耳机也玩顶配
- 手机大魔王|荣耀X10和Redmi10X到底该怎么选?看这几点就知道