目录
2 加了默认的try-catch e.printStackTrace()
3 try-catch 中用throw new Exception()替换掉e.printStackTrace()
6 e.printStackTrace()和 throw new Exception()的不同
1 不加任何异常处理
可以看到doFormPDF()异常以下的代码都不走了
2 加了默认的try-catch e.printStackTrace()
看到try中异常以下代码都不走了,
catch中的代码都走, 然后离开try-catch之外后面的代码还是会继续往下走到结束.
打印的异常是和(不加任何异常处理)打印的一模一样.
是捕获了异常,try-catch外的代码不会不会感知到这个异常,因为这个异常被try-catch消灭了,相当于没异常了.
try-catch以外的后面的代码还是可以走的.
3 try-catch 中用throw new Exception()替换掉e.printStackTrace()
会发现throw new Exception()所在的这个方法,和调用这个方法的上层方法,
都被迫加上throws Exception
看到try中异常以下代码都不走了,
catch中在throw new Exception()之前的代码还走,throw new Exception()之后的代码就不走了
离开try-catch之外后面的代码也不走了,
因为throw new Exception()这个源码里有return,直接相当于线程return了,没了,
打印的错误信息是自己自定义的提示的错误信息(自定义报错原因+代码位置)
.这个是和默认(系统定义报错原因+代码位置)最根本的区别,
4 上层方法去接下层的异常.
上面那个方式:(try-catch 中用throw new Exception()替换掉e.printStackTrace(),
会发现throw new Exception()所在的这个方法,和调用这个方法的上层方法,
都被迫加上throws Exception)
这个时候,我们站在上层方法的角度,我不希望下层throw new Exception()后连我这个上层方法的代码也没法往下走了.
这个时候,我这个上层方法可以自己try-catch把这个出错的下层方法包起来,这样,我这个上层方法的代码不至于蹦了,就能继续catch内部的,和离开try-catch外部之后的代码了.
try-catch设置的异常必须等于或大于下层传来的异常类型.
5 try-catch-finally
试验得知:不管catch里是e.printStackTrace()还是throw new Exception(),
finally里的代码都会运行
6 e.printStackTrace()和 throw new Exception()的不同
e.printStackTrace()指的是:在命令行打印异常信息在程序中出错的位置及原因,
特点:是即时在控制台打印的,代码执行完这一句,控制台的错误信息就打印出来了.
try-catch加 e.printStackTrace() 是可以自己捕获错误异常,并直接把错误异常打印在控制台的,然后这个异常就被消灭了. try-catch之外的代码是感知不到这个异常的, 上层的代码用 try-catch也是捕获不到下层被try-catch消灭的异常的.
try-catch 不加 e.printStackTrace() 也是可以消灭异常的,但是和加了e.printStackTrace()的区别就是不打印异常信息了,
try-catch加 throw new Exception() 代码的异常已经被 try-catch消灭了,但是这时我又自己手动throw抛了一个新的Exception()异常.这个新的异常一直网上抛,如果上层不加try-catch去捕获它
.那么它就会把线程停止(相当于return),后面的代码都不走了. (finally除外)
然后在控制台打印Exception(messge)里面的messge异常消息
try-catch加 e.printStackTrace()(放前面)加throw new Exception()(放后面), 先是前面的e.printStackTrace()立马在控制台打印默认格式的错误信息, 然后就是throw new Exception()手动throw抛了一个新的Exception()异常.
7 try-catch-finally和return
1) 下面的实验得知,catch中的return优先级是低于finally中的return的.
2) 下面的实验得知,return的优先级=throw new exception的优先级.
throw new exception就相当于return了.
3) 优先级总结:
finally的(return=throw new exception) > catch的(return=throw new exception)