之前调试只发现有的方法执行完return语句后再执行finally,但是没有细究

最近debug代码的时候发现,不同返回类型的方法,return和finally执行顺序竟然不一样

先看返回类型为void的执行顺序:

继续执行:

继续:

发现执行顺序是:

try中代码->finally代码->try中的return,是先执行finally,再执行return

再看返回类型为int类型的执行顺序:

继续执行:

发现竟然直接到了return,继续:

开始执行finally,执行顺序为:

try中代码->try中return->finally,而且此方法返回值依然为1,x=100会执行,但不会返回

原因:

void方法的return就是返回,return是方法的最后一步,当然先执行finally

int方法或其他有返回值的方法,return实际是将返回值赋值给一个匿名变量,并在最后返回前加载该变量到栈顶,然后执行返回,所以debug执行testx时,执行return x并不是直接返回,只是把x的值赋给了一个匿名变量

补充:

JDK 7之后提供了try with resource的方式,会在代码块执行完毕后执行Closeable的close方法,释放资源

所以finally的在业务上的使用场景其实并不多,此处解释为了方便源码调试时的理解

【Java】先return还是先finally的更多相关文章

  1. 经典的java中return和finally问题!

    经典的java中return和finally问题! 标签: 杂谈 分类: java学习 前一段时间 参加公司的笔试问了这个问题,回来一查才知道当时自己做错了,百思不得其解,上网查到下面的程序,但是运行 ...

  2. java中return与finally的执行顺序

    可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定 ...

  3. java中return和continue区别

    编程语言大多是想通的,当然java也不例外,下面的在其他编程语言也是相同的道理. return与continue的区别 先看代码哦 class demo2 { public static void m ...

  4. Java中Return和Finally运行顺序的实现

    以下这段代码的运行结果是如何的呢? [java] view plaincopyprint? publc int test(){ int x; try{ ; return x; }catch(Excep ...

  5. Java中return返回结果的优先级

    在Java开发时,异常处理是非常普遍的.先看这样一道关于异常处理的代码 public static int getNumer() { int a = 1; try { return a; } catc ...

  6. Java中return的语句

    1.return语句的作用:a.返回一个值,这个值可以是任意类型.b.使程序返回到操作系统(即终止程序)2.java中对于一个函数,不论有没有返回值类型,都可以带有return 语句.但是区别在于,r ...

  7. Java中Return和Finally执行顺序的实现

    下面这段代码的执行结果是怎样的呢? publc int test(){ int x; try{ x = 1; return x; }catch(Exception e){ x = 2; return ...

  8. Java基础 return 退出main方法的示例

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  9. java 之return

    return关键词有两个用法,一方面制定一个方法返回什么值,另一方面导致当前方法退出.

  10. java 中 return 的两种常见的用法

    一:return语句总是用在方法中,有两个作用: 一个是返回方法指定类型的值(这个值总是确定的), 一个是结束方法的执行(仅仅一个return语句). 二:实例1 -- 返回一个String priv ...

随机推荐

  1. IDEA 报 Unable to import maven project: See logs for details

    用的apache-maven-3.6.2 报错,解决方法:降级成 apache-maven-3.6.1 版本 IDEA 报 Unable to import maven project: See lo ...

  2. Windows下的Linux子系统(WSL)

    什么是WSLWSL:Windows subsystem for Linux,是用于Windows上的Linux的子系统作用很简单,可以在Windows系统中获取Linux系统环境,并完全直连计算机硬件 ...

  3. 如何优雅的在 Word 中添加漂亮的代码?

    Step 01 第一步,在编程软件里找到你想要放进Word文档里的代码,复制下来. Step 02 第二步,打开Notepad++,将代码直接粘贴. Step 03 第三步,这个时候的代码是没有任何格 ...

  4. 题解 - Japanese Student Championship 2021

    前言:这场的题解由于蓝桥杯比赛拖延几天才发 关于本篇题解,目前还是有部分题没有解答出来正在加油补题ing 补题链接:Here A - Competition 题意:给定 \(X,Y,Z\) 代表的意义 ...

  5. 【每日一题】6.Rinne Loves Edges (树形DP)

    题目链接:Here 树形DP 算法讲解:Here 无向联通图其实就是树的形状,其次让我们以 s 为根使得所有的叶子节点不能到达根并且让删去边权的总和最小,那么就是典型的 树形DP 了. \(dp_i\ ...

  6. vue+spingboot 实现服务器端文件下载功能

    vue3 和springboot配合如何实现服务器端文件的下载. 先看springboot的后台代码: @PostMapping("/download") @ResponseBod ...

  7. java进阶(14)--日期时间处理

    一.获取系统当前时间: 1.Date(),精确到毫秒的当前当前时间 2.示例,欧美风格时间格式

  8. longjmp 使 C++ RAII 失效

    C 语言的 longjmp 没有进行栈展开,而是直接跳转.从 longjmp 到 setjmp 之间的所有析构函数都没有调用,也就是 RAII 失效. #include <setjmp.h> ...

  9. Nacos源码 (4) 配置中心

    本文阅读nacos-2.0.2的config源码,编写示例,分析推送配置.监听配置的原理. 客户端 创建NacosConfigService对象 Properties properties = new ...

  10. [转帖]L4LB for Kubernetes: Theory and Practice with Cilium+BGP+ECMP

    http://arthurchiao.art/blog/k8s-l4lb/ Published at 2020-04-10 | Last Update 2020-08-22 1. Problem De ...