异常处理时,Finally执行情况?
我们在编写代码的时候,异常是不可避免的,比如在接受用户输入的参数时,或者说是文件的操作。这就需要我们去对异常进行处理。今天在回首这个知识点的时候,就看到这个问题。下面跟大家分享一下。有test1()和test2()方法
运行结果:第一行的年龄是test1的结果,第二行的i是test2运行的结果
其中test1()方法,在设置年龄为20后,我们就直接return了,大家都知道return就意味着方法的结束,那么年龄应该是20才对,但是最后年龄却是21。我们再看看test2方法,可以看到最后可能跟我们最开始的思考结果相同。那么,问题出现在哪里呢,那就是test1()返回的是引用数据类型,test2()返回的是基本数据类型。
下面自己的对于test1()的拙见:
我们再看看test2()方法:
上面都是最后finally执行了嘛,只是一个生效,一个没有生效,那么有没有可能finally不会执行呢。下面我们看看,这个情况
运行结果:
很明显可以看到,我们会发生算术运算异常,但是最后的finally并没有打印语句,就是因为我们的catch之后的语句,System.exit(0);,就是正常退出程序的意思,所以我们finally就不会执行。
最后总结:
finally会执行的情况
1:方法的返回时基本数据类型:那么finally的修改无效
2:方法的返回时引用类型:那么finally的修改就会生效
finally不会执行:System.exit(0);这个语句,或者说我们关闭电脑,停电等操作。
3:其实在finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,我们也不推荐在finally去改变返回值。