赞
踩
第一种情况:在try和catch中有return,finally中没有return,且finally中没有对try或catch中要 return数据进行操作的代码,这种情况也是最好理解的。
第二种情况:在try和catch中有return,finally中没有return,但finally中有对try或catch中要 return数据进行操作的代码
要返回的数据是基本数据类型还是引用数据类型,对结果也有不同的影响
①返回的数据为基本数据类型,则finally中对要返回数据操作无影响
②返回的数据为引用数据类型,finally中如果改变了返回对象的属性则影响结果,如果改变的是对象的引用则和基本数据类型一样不改变结果
第三种情况:在try和catch中有return,finally中也有return
try或catch中return后面的代码会执行,但最终返回的结果为finally中return的值,需要注意的是try或catch中return后面的代码会执行,只是存起来了,并没有返回,让finally捷足先登先返回了。
第四种情况:在try中有return,在catch中新抛出异常,finally中有return
如果catch块中捕获了异常, 并且在catch块中将该异常throw给上级调用者进行处理, 但finally中有return, 那么catch块中的throw就失效了, 上级方法调用者是捕获不到异常。
第五种情况:只有try,没有catch,有finally。同4,如果finally里有return,会返回值;如果没有会向上抛出异常。
总结:finally里的代码一定会执行,如果try 或者 catch里有return,return是表达式的,表达式会执行,但是如果finally也有return,以finally里为准,catch里向上抛出的异常也要“让步”。
参考:https://www.cnblogs.com/sunshineweb/p/7656463.html
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。