try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行?
这个我本来理解清楚了,是return前准确来说是return中执行的,但是今天一看相关的又迷糊了,所以做个笔记记录一下。迷糊的主要是看finally中有没有return。
①没有return:try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? - 云+社区 - 腾讯云 (tencent.com
public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; /* * return a; 在程序执行到这一步的时候,这里不是return a; 而是return 30; 这个返回路径就形成了。 * 但是呢,它发现后面还有finally,所以继续执行finally的内容,a=40 * 再次回到以前的返回路径,继续走 return 30; */ } finally { a = 40; // return a; // 如果这样结果就是40了。这样的话就产生了一个新的返回路径。 } return a; } }
//返回30
②如果finally有return,用另一个代码方便理解:
package exception; public class TestException { public static int method() { try { return return1(); } catch (Exception e) { return return2(); } finally { return return3(); } } private static int return1() { System.out.println("return 1"); return 1; } private static int return2() { System.out.println("return 2"); return 2; } private static int return3() { System.out.println("return 3"); return 3; } public static void main(String[] args) { int result = method(); System.out.println("result:" + result); } }
看完这两个结果应该就很好理解了,总结起来就是,先执行try,看里面的代码有没有错,有错的话执行catch,没错执行到return,有错执行到catch中的return,在到return时,再执行finally的方法(注意return后面的函数是执行的,比如第二个代码输出了“return 1”,只是不返回1),finally方法如果有return 的话,执行finally中的return,之前的return 就不返回了。
容易犯错的就是比如第一个代码,按理说执行finally后,a=40,catch中返回的是a,那按理说应该是输出40,为什么是30呢,因为当执行到catch中的return a;这段代码时,计算机记录的是 return 30,而不是return a,相当于告诉你,我现在马上要return 30了,你赶紧把你的finally代码执行完,执行完我就返回了。
在网上找到了其他的说法,以供理解:
主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具