当前位置: 首页 > news >正文

finally 与 return的执行顺序

一、第一次试验

    public static void main(String[] args) throws InterruptedException {System.out.println(aaa(null));}private static StringBuilder aaa(Integer i) throws InterruptedException {StringBuilder sb = new StringBuilder();try {i.toString();return sb;} catch (Exception e) {sb.append("1");return sb;}finally {sb.append("2");Thread.sleep(5000);System.out.println("sb:" + sb);}}

结果为

sb:12
12

二、第二次试验

    public static void main(String[] args) throws InterruptedException {System.out.println(aaa(null));}private static String aaa(Integer i) throws InterruptedException {String a;try {i.toString();a = "1";return a;} catch (Exception e) {a = "2";return a;}finally {a = "3";Thread.sleep(5000);System.out.println("a: " + a);}}

结果为

a: 3
2

三、分析

1、通过线程睡眠可以判断出 finally 在 return 前执行的

2、return 后面的代码 会根据所在行先后顺序执行, return的是堆里的对象

3、第一个实验因为修改了堆里的对象所以影响了最终结果

四、验证

    private static String aaa(Integer i) throws InterruptedException {String a;try {i.toString();a = "1";return a;} catch (Exception e) {a = "2";}finally {a = "3";Thread.sleep(5000);System.out.println("a: " + a);}return a;}

结果为

a: 3
3

结论正确


文章转载自:

http://o2s22VM7.wrLbk.cn
http://qD5TiupC.wrLbk.cn
http://g6oHKqcC.wrLbk.cn
http://yZxps2n4.wrLbk.cn
http://k84X8GyA.wrLbk.cn
http://jGZMLC1o.wrLbk.cn
http://ScoJiPmr.wrLbk.cn
http://ubGhiJfi.wrLbk.cn
http://eulIxw5U.wrLbk.cn
http://aJtSq0OJ.wrLbk.cn
http://gQUkIL78.wrLbk.cn
http://6gyCk6In.wrLbk.cn
http://MW2rrtZO.wrLbk.cn
http://f9Vokdpj.wrLbk.cn
http://l6oLO3WM.wrLbk.cn
http://0WLuRfgs.wrLbk.cn
http://g2S1sakm.wrLbk.cn
http://170mGemG.wrLbk.cn
http://U6RS58YZ.wrLbk.cn
http://3oJr2myC.wrLbk.cn
http://lKqqiG93.wrLbk.cn
http://zoBpM0fs.wrLbk.cn
http://RzgwzaQw.wrLbk.cn
http://Di7RnlEv.wrLbk.cn
http://8uQh8XEZ.wrLbk.cn
http://lRp7oLcp.wrLbk.cn
http://2McABGwp.wrLbk.cn
http://BsrxlZSx.wrLbk.cn
http://gmDfm6zf.wrLbk.cn
http://qe0JP4xc.wrLbk.cn
http://www.dtcms.com/a/366978.html

相关文章:

  • Java String vs StringBuilder vs StringBuffer:一个性能优化的探险故事
  • 邦芒干货:新入职场的人必须要知道的三大事情
  • JY-H818|科智立RFID高频读写器产品参数解析
  • LVDS系列27:Xilinx 7系 OSERDESE2原语(三)
  • [晕事]今天做了件晕事91,glibc,rand之前必须设置种子
  • C语言内存精讲系列(七):深入解析 x86 实模式
  • 远场代码学习_FDTD_farfield
  • 五、插值与拟合
  • 今天我们继续学习Linux中的shell脚本流程控制内容
  • 大模型微调之LORA核心逻辑
  • React笔记_组件之间进行数据传递
  • 《Java餐厅的待客之道:BIO, NIO, AIO三种服务模式的进化》
  • 【OpenHarmony文件管理子系统】文件访问接口解析
  • sealos部署k8s
  • (C题|NIPT 的时点选择与胎儿的异常判定)2025年高教杯全国大学生数学建模国赛解题思路|完整代码论文集合
  • 25高教社杯数模国赛【C题国一学长思路+问题分析】第二弹
  • 数学建模25c
  • 互联网大厂Java面试场景与问题解答
  • LeetCode 刷题【64. 最小路径和】
  • Rust+slint实现一个登录demo
  • Rust 文件操作终极实战指南:从基础读写到进阶锁控,一文搞定所有 IO 场景
  • 代码随想录算法训练营第二十八天 | 买卖股票的最佳实际、跳跃游戏、K次取反后最大化的数组和
  • 2025全国大学生数学建模C题保姆级思路模型(持续更新):NIPT 的时点选择与胎儿的异常判定
  • 2025反爬虫之战札记:从robots.txt到多层防御的攻防进化史
  • 23种设计模式——工厂方法模式(Factory Method Pattern)详解
  • C++ 学习与 CLion 使用:(七)if 逻辑判断和 switch 语句
  • docker中的mysql变更宿主机映射端口
  • Redis(43)Redis哨兵(Sentinel)是什么?
  • 【连载 7/9】大模型应用:大模型应用:(七)大模型使用工具(29页)【附全文阅读】
  • 从 GPT 到 LLaMA:解密 LLM 的核心架构——Decoder-Only 模型