Java是采用面向对象的方式来处理异常的。处理过程:
1.抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一一个对象,停止
当前执行路径,并把异常对象提交给JRE。
2.捕获异常: JRE得到该异常后,寻找相应的代码来处理该异常。JRE在方法的调用栈中查找,从。
生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
异常的分类
Error与Exception的区别
1. 我开着车走在路上,一头猪冲在路中间,我刹车。这叫一个异常。
2. 我开着车在路上,发动机坏了,我停车,这叫错误。系统处于不可恢复的崩溃状态。发动机什么时候坏?我们普通司机能管吗?不能。发动机什么时候坏是汽车厂发动机制造商的事。
RuntimeException运行时异常
这类异常通常是由编程错误导致的,所以在编写程序时,并不要求必须使用异常处理机制来处理这类异常,经常需要通过增加“逻辑处理来避免这些异常”。(即这类异常属于运行时异常,编译器无法检查出来)
CheckedException已检查异常
所有不是RuntimeException的异常,统称为Checked Exception,又被称为“已检查异常”,如IOException、SQLException等以及用户自定义的Exception异常。 这类异常在编译时就必须做出处理,否则无法通过编译。(称为Checked意味着在编译时就被处理掉了)
如图,执行语句1如果遇到异常,会寻找与之相匹配的catch,之后执行finally里的内容,语句2不执行
当CheckedException产生时,不一定立刻处理它,可以再把异常throws出去。
在方法中使用try-catch-finally是由这个方法来处理异常。但是在一些情况下,当前方法并不需要处理发生的异常,而是向上传递给调用它的方法处理。