try-catch-finally异常处理实验

目录

1 不加任何异常处理

2  加了默认的try-catch e.printStackTrace()

3  try-catch 中用throw new Exception()替换掉e.printStackTrace()

4  接着3的那个方式的延伸 

5  try-catch-finally

6  e.printStackTrace()和 throw new Exception()的不同

7  还差一个全局异常处理类,后面有空补上


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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值