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

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://www.xdnf.cn/news/20226.html

相关文章:

  • Web相关知识(草稿)
  • MySQL高可用之组复制(MGR)
  • Web基础、HTTP/HTTPS协议与Nginx详解
  • 商城系统——项目测试
  • JUC的安全并发包机制
  • Python 值传递 (Pass by Value) 和引用传递 (Pass by Reference)
  • go面试题-什么是用户态和内核态
  • 数组本身的深入解析
  • 研发文档撰写质量参差不齐该怎么办
  • 突破大语言模型推理瓶颈:深度解析依赖关系与优化策略
  • YOLOv8主干网络替换为UniConvNet的详细指南
  • Unity中,软遮罩SoftMaskForUGUI的使用
  • 25高教社杯数模国赛【E题保姆级思路+问题分析】
  • 【Day 20】148.排序链表
  • Electron 执行python脚本
  • IPV6、广播地址
  • 单片机实现分页显示环形更新的历史数据
  • 算法随笔(一)
  • S32K328上芯片内部RTC的使用和唤醒配置
  • 深度学习篇---MNIST:手写数字数据集
  • 基础排序--冒泡--选择--插入
  • 【算法--链表】25.K个一组翻转链表--通俗讲解
  • Linux初始化配置——RHEL7.9、9.3环境部署
  • 【C语言】 第三课 函数与栈帧机制详解
  • RTP打包与解包全解析:从RFC规范到跨平台轻量级RTSP服务和低延迟RTSP播放器实现
  • Deeplizard深度学习课程(七)—— 神经网络实验
  • 飞算JavaAI全面解析:重塑Java开发流程的智能引擎
  • 商城源码后端性能优化:JVM 参数调优与内存泄漏排查实战
  • List<?>和List<Object>区别
  • 第二阶段WinForm-12:UI控件库