Java异常实现 及 原理
发现代码错误的时机
1.程序编译期间,由编译器对代码进行编译,遇到错误的会给出提示
2.程序运行期间,运行时出现了不可预料的错误,会抛出异常
异常的意义
不允许程序沿着其正常的路径继续走下去,并告诉我们程序发生了什么
一个异常的执行顺序
1.new一个异常对象
2.终止当前的执行程序
3.弹出异常对象的引用
4.异常处理机制接管被终止的执行程序
5.寻找一个恰当的地点(异常处理程序)继续执行程序
一个异常的诞生
1.捕捉异常
(1)try块
一个方法内部出现问题,或者一个方法内部调用其他方法的时候出现问题,当前程序会立刻中断,如果你不希望程序中断,可以在这个块中增加一个“尝试”各种可能产生各种异常的方法调用,他就是try块
(2)catch异常处理程序
必须紧跟在try后面,当你希望对异常做出处理,异常处理程序就是你最好的选择,在这里你可以针对每种想要捕捉的异常,准备相应的应对措施,这就是catch
当异常抛出后,异常处理机制会寻找与异常类型匹配的catch块儿
注意一点:当异常处理机制匹配到了一个异常处理程序后,会在当前异常程序处理完毕后结束整个异常处理环节,其他异常处理程序不会再执行
异常处理理论上有两种基本模型:终止与恢复
(1)终止模型:这种模型将假设错误非常关键,以至于程序无法返回到异常发生的地方继续执行,一旦异常抛出错误,就意味着了凉凉,GG
(2)恢复模型:异常处理程序发现了错误,并且修复了错误然后重新调用出问题的方法,并且认为第二次调用该方法辉成功,通常可以将try块放入while循环中,不断执行方法,直到得到满意的结果
这日复一日,年复一年,伟大的程序员们认为恢复模型会带来很多非通用性的代码,增加了维护难度,因为你需要穷举出各种可能的问题和异常的解决办法,并且一旦异常始终无法正常解决,就会陷入无限的循环中。说白了就是管的越细越会给自己造成不必要的麻烦。我们为什么不管一个大面儿,兵来将挡水来土掩,直接抛出来更容易维护。
创建异常对象
2.1自定义异常
所谓的自定义异常就是java提供的异常体系无法满足你的需求,说白了就是有些异常系统无法预见,需要人为干预,所以才有自定义异常的方式,要定义一个异常必须从已有的异常类进行继承。
如何自定义异常类:
public class MyException extends Exception {
public MyException(){}
publc MyException(String exceptionMassage){
super(exceptionMassage) //明确调用基类的构造器,接收一个字符串为参数
}
}
所有的标准异常类都有两个构造器,一个是默认构造器,一个是接收字符串作为参数,以便把相关参数放出异常处理对象的构造器
throw:抛出一个异常
throws:声明一个异常
异常原理
分析