1.异常与控制流

image.png
一个函数的入口是参数,出口是return语句,异常是另一个出口。
image.png

1.1异常的产生与捕获

产生

image.png

捕获

image.png
可以在a方法中捕获异常。
image.png

1.2finally

finally是在方法的最后去做一些事,不论有没有异常。如果有异常,那么也要做。
image.png

finally用法

结束文件的访问,断开链接。
image.png

执行finally里面的return(不要这么做,finally只执行资源的清理)

image.png

1.3try-with-resources

使用前,在finally里面清理。
使用后,try后面的()内的内容,会在执行结束后自动清理。
image.png

image.png

2.异常的类型体系

image.png

2.1Throwable

image.png

Throwable是所有异常和错误的父类。

Exception(受检异常;有毒)

只要a方法写了throw或者throws,那么所有调用到的a方法的方法都要加上throws或者try,catch。
image.png

1.throw

在方法执行到这行之后,下一个要做的事情就是丢出异常,中断当前方法的执行,知道碰到一个能捕捉到它的方法为止。
image.png

当没有程序能捕捉到异常。
image.png

2.throws

throws是声明在方法上面,表示将来可能会丢出什么东西。
image.png

所有调用带有throws方法的方法都要加上throws。
image.png
或者使用try,catch将异常抓住。
image.png

RunTimeException预料之外的异常(运行时异常;无毒)

image.png
image.png

Error(不受检异常;无毒)

error是错误是无法处理的,而exception异常是可以处理和回复的。
image.png

2.2catch级联

image.png

如果没有异常抛出,就继续执行后面的语句。
image.png

要从小到大的顺序来catch
image.png

异常合并
image.png

3.异常的栈轨迹

image.png

3.1栈轨迹

main函数调用a方法,a方法调用b方法,b方法调用foo方法,foo方法抛出异常。
image.png

方法调用的栈轨迹。
image.png

打印的没有被捕获的异常。
image.png
image.png

3.2异常链

image.png
image.png

4.异常处理

4.1异常抛出原则

image.png

4.2错误处理原则

image.png

4.3常见异常

image.png