异常处理时,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去改变返回值。

 

posted @ 2021-07-06 15:46  kunmin  阅读(148)  评论(0编辑  收藏  举报