面试被问finally 和 return,到底谁先执行?

手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件) 本文提供了一份详细的Simulink仿真指南,手把手教你从零开始搭建交流异步电机矢量控制模型。内容涵盖主电路搭建、坐标变换实现、双闭环PI调节器设计、转子磁链观测器调试等核心步骤,并附有完整的仿真文件,帮助读者跨越理论到实践的鸿沟,掌握高性能电机控制系统的建模与仿真技能。 阅读详情

经常有人面试被问到,finally 和 return,到底谁先执行呢?

为了解决这个问题,其实我们可以先想想 finally 是被用来干嘛的呢?它是被用来结束一些正常的收尾动作或结束标识。也就是说无论怎么样,finally 都会被最后执行。例如:一般在操作数据库时,用Jdbc连接池连接数据库后释放资源,需要 finally 来处理。再如 redis 连接,在获取连接池处理完数据的增删改查后,需要释放其连接池。

file

但是,如果 return 是在 finally 前面呢?或者在 finally 后面呢?我们先来看看 return 在 finally 前面时,如:

package com.test;

/**
 * 
 * 
 * @author Damon 
 * @date 2020年3月18日 上午11:02:08
 *
 */
public class App {
  public static void main(String[] args) {
    System.out.println("return result: " + test());
  }

  public static int test() {
    try {
      Thread.sleep(1);
      System.out.println("執行 return 1");
      return 1;// return 在try里,則先執行,再執行finally后才有可能执行该return
    }
    catch (InterruptedException e) {
      e.printStackTrace();
      return -1;
    }
    finally {
      System.out.println("执行 finally");
      //return 3;
    }
    //System.out.println("執行 return 2");
    //return 1;
  }
}

结果:

執行 return 1
执行 finally
return result: 1

也就是说,在执行 return 之前,先执行了 finally。

我们在看,如果 finally 前面有 return,在其内部也有 return:

package com.test;

/**
 * 
 * 
 * @author Damon 
 * @date 2020年3月18日 上午11:02:08
 *
 */
public class App {
  public static void main(String[] args) {
    System.out.println("return result: " + test());
  }

  public static int test() {
    try {
      Thread.sleep(1);
      System.out.println("執行 return 1");
      return 1;// return 在try里,則先執行,再執行finally后才有可能执行该return
    }
    catch (InterruptedException e) {
      e.printStackTrace();
      return -1;
    }
    finally {
      System.out.println("执行 finally");
      return 3;
    }
    //System.out.println("執行 return 2");
    //return 1;
  }
}

结果:

執行 return 1
执行 finally
return result: 3

其内部被 return 后,就不再执行前面那个 return 了。

我们再来看 return 在 finally 之后,如:

package com.test;

/**
 * 
 * 
 * @author Damon 
 * @date 2020年3月18日 上午11:02:08
 *
 */
public class App {
  public static void main(String[] args) {
    System.out.println("return result: " + test());
  }

  public static int test() {
    try {
      Thread.sleep(1);
      //System.out.println("執行 return 1");
      //return 1;// return 在try里,則先執行,再執行finally后才有可能执行该return
    }
    catch (InterruptedException e) {
      e.printStackTrace();
      //return -1;
    }
    finally {
      System.out.println("执行 finally");
      //return 3;
    }
    System.out.println("執行 return 2");
    return 1;
  }
}

结果:

执行 finally
執行 return 2
return result: 1

总结:finally 在 return 之后时,先执行 finally 后,再执行该 return;finally 内含有 return 时,直接执行其 return 后结束;finally 在 return 前,执行完 finally 后再执行 return。

接下来还有常被问到的是:Java 中 final、finally、finalize 的区别与用法:

  • final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。即如果一个类被声明为 final,意味着它不能作为父类被继承,因此一个类不能同时被声明为 abstract 的,又被声明为 final 的。变量或方法被声明为 final,可以保证它们在使用中不被修改。被声明为 final 的变量必须在声明时给赋予初值,而在以后的引用中只能读取,不可修改。被声明为 final 的方法也同样只能使用,不能重载。
  • finally 是异常处理语句结构的一部分,总是执行,常见的场景:释放一些资源,例如前面所说的 redis、db 等。在异常处理时提供 finally 块来执行任何清除操作,即在执行 catch 后会执行 finally 代码块。
  • finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。


个人网站

技术分享博客

结束福利

开源实战利用 k8s 作微服务的架构设计代码:

https://gitee.com/damon_one/spring-cloud-k8s

欢迎大家 star,多多指教。


关于作者

  笔名:Damon,技术爱好者,长期从事 Java 开发、Spring Cloud 的微服务架构设计,以及结合docker、k8s做微服务容器化,自动化部署等一站式项目部署、落地。Go 语言学习,k8s研究,边缘计算框架 KubeEdge 等。公众号 程序猿Damon 发起人。个人微信 MrNull008,欢迎來撩。


欢迎关注 InfoQ: https://www.infoq.cn/profile/1905020/following/user

欢迎关注

win11下的MySQL安装 目前官方最新版本是8.0.26,考虑到其稳定性、可靠性还需一定周期保证,所以使用官方版求稳定仍然建议5.7系列。3、选择MySQL Servers 5.7.38 -x64,然后按绿色箭头将选中的版本移植到右边选中框中。4、点击下方蓝色Advanced Options,选择安装位置。1、在开始界面搜索MySQL,点击command line。4、在“系统变量”中选择“path”,点击编辑。5、新建——>增加MySQL路径——>确定,12、execute,安装好后next。9、不需要做修改,直接点击next。. 阅读详情

相关推荐

HBF凭什么能挑战HBM?

最近AI圈聊得最多的,除了大模型迭代,就是“算力瓶颈”。大家都知道GPU不够用、HBM抢疯了,但很少有人注意到,存储层正在酝酿一场革命——高带宽闪存(HBF)。今天就结合HBM之父Joungho Kim教授的最新观点,跟大家好好盘盘这门技术:它不是HBM的替代品,却可能重塑AI推理的游戏规则,甚至在2038年超越HBM市场规模。先澄清一个核心认知:HBF不是凭空冒出来的新技术,而是站在HBM肩膀上的“优化款”。

存储随笔 2130

finally的用法解析(对于try事务的提交与回滚控制)

问题:1.try中事务执行成功,finally如果里面catch异常了,try中会回滚吗? 2.finally中的return会对返回数据造成什么影响? 起因:最近阅读代码时发现调用第三方服务时存在事务问题,于是就测试了finally的用法,在开发中我们可以在处理业务中更好的把控事务控制和异常的捕获。 问题一:因为lz的事务控制是在执行method()时候开启,在执行完...

qq_39809613的博客 1万+

zabbix监控深信服下一代防火墙配置

深信服下一代防火墙v8.0管理界面,zabbix,SNMP

weixin_43996471的博客 6873

spring boot事务提交和finally的执行顺序

如上面的例子,finally会先执行,事务提交是在整个方法执行完之后执行的。

weixin_41765715的博客 1040

Xiaojie雷达之路---毫米波雷达基础知识---角度估计

本篇文章主要介绍毫米波雷达的基础知识中的角度估计,对于本篇文章主要回答5个问题 1.在雷达的前方,如何估计前方一个物体的角度 2.角度测量的准确性 3.如何测量多个物体的角度 4.雷达可测的角度的视场最大值为多少 5.角度分辨率取决于什么因素 文章目录估计雷达前面一个物体的角度角度测量的准确性雷达的最大角视场测量雷达前方多个距离和速度相同的物体角度分辨率角度估计的流程 估计雷达前面一个物体的角度 估计一个物体的角度,最少需要两根接收天线 发射天线发送一个chirp,经过物体发射后信号,信号分别被第一根天

XiaoJie的博客 1万+

(最新更新!)2024全国大学生数学建模竞赛(国赛)B题决策优化+鲁棒模型完整建模全解全析

2024全国大学生数学建模竞赛(国赛)B题完整建模全解全析(已更新!)

Yilu264的博客 9417

Java finally语句到底是在return之前还是之后执行?

详细文章内容请进入 《Java finally语句到底是在return之前还是之后执行?—第一篇》 《Java finally语句到底是在return之前还是之后执行?—第二篇》 《try catch finally小结》 《Java finally语句到底是在return之前还是之后执行?—第一篇》通过执行代码来验证了try/catch/finally中包含return的各种情况,得出的结论...

crystalbang的博客 449

Foxglove 介绍以及入门使用教程

Foxglove 是由Foxglove 工作室开发的一套工具集,包括和等组件。跨平台支持:可以在 Windows、macOS 和 Linux 上运行。多协议兼容:支持 ROS、ROS 2、CAN 数据以及其他自定义协议。丰富的可视化功能:可以绘制点云、轨迹、激光雷达数据、IMU 数据等。实时与离线模式:既可以实时监控机器人状态,也可以加载和回放记录的数据文件。Foxglove 的 3D 视图允许你以三维方式查看机器人的运动轨迹、传感器数据和其他几何信息。你可以旋转、缩放和平移视图以获得更好的观察角度。

zolty 1万+

锁释放和事务提交的顺序问题

面对高并发是锁的实现要使用aop 实现,锁不能加在方法中,应为事务一般是方法结束后提交,而锁在finally 方法中提交,从而会出现锁已经解锁而事务还没来得及提交,下个锁获得到的数据就不对。 ...

Fan_c_w的博客 2795

基于潜在空间分数匹配的混合型表格数据合成方法

然而,在我们的模型中,β 预计会更小,因为我们不需要嵌入的分布精确地遵循标准高斯分布,因为我们还有一个额外的扩散模型。受 Transformer 在表格数据分类/回归任务中取得成功的启发,我们首先为每一列学习一个独特的标记器,然后将标记(列)级表示输入到 Transformer 中,以捕捉列之间错综复杂的关系。在第 4 节中,我们证明了通过这种设计,TABSYN 可以在不到 20 次函数评估(NFE)的情况下生成高质量的合成表格数据,这比其他基于扩散的表格数据合成方法要少得多。是标记器的可学习参数。

步子哥的博客 854

基于AUTOSAR的汽车电子项目--电动助力转向系统

基于AUTOSAR的汽车电子项目开发通常涵盖广泛的领域,例如动力系统控制、车身电子、信息娱乐系统、高级驾驶辅助系统(ADAS)等。以下是一个简化的示例项目,展示了如何在AUTOSAR环境下开发一个电动助力转向系统(Electric Power Steering, EPS)的控制软件

MHD0815的博客 2131

finally到底是在return之前执行还是return之后执行?

finally一般是在try里面捕获异常用的,为了确保某些操作一定可以执行 public class Test { public static void main(String[] args) { query(); } public static void query() { int i = 0; i++; ...

D调的博客 1724

地统计插值学习心得(一)

(创建地统计图层工具用于根据现有的地统计图层或者地统计模型来创建包含新要素数据集的地统计图层,也就是使用构建好的地统计模型用到新的数据集中)这表明,远离极值的区域预测不受极值的影响,并且还表明,包括极值会导致钼元素浓度高的区域周围的预测明显变高。通常,我们使用同一个数据集进行建模和预测,但是在实际插值过程中,这两步的数据可以是不同的,这就是处理极值的诀窍。如果你的数据集有无法忽略的极值时(比如这些钼元素浓度),一种常见的方法是首先显式移除极值进行建模,然后在预测中使用整个数据集(包括极值)。

JData_Engineer的博客 287

Java中return和finally到底哪个先执行

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!1上述代码的输出可以简单地得出结论:return在finally之前执行,我们来看下字节码层面上发生了什么事情。下面截取case1方法的部分字节码,并且对照源码,将每个指令的含义注释在后面:0: iconst_1 // 将常量1推入操作数栈顶1: istore_0 // 弹出栈顶元素(1),保存到局部变量表slot[0],此时slot[0]=1。这两条指令对应源码:x = 1;2: iload_0 // 将

2401_84048542的博客 532

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

try、catch、finally、return执行顺序超详解析(针对面试题)

try、catch、finally、return执行顺序超详解析(针对面试题) 有关try、catch、finally和return执行顺序的题目在面试题中可谓是频频出现。总结一下此类问题几种情况。 写在前面 不管try中是否出现异常,finally块中的代码都会执行; 当try和catch中有return时,finally依然会执行; finally是在return语句执行之后,返回之前执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍

weixin_45759791的博客 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java中return和finally到底哪个先执行,java面试线程锁

千千万万要记得:多刷题!!多刷题!!之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!篇幅有限,以下只能截图分享部分的资源!!(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)(2)刷的算法题(还有左神的算法笔记)(3)面经+真题解析+对应的相关笔记(很全面)(4)视频学习(部分)ps:当你觉得学不进或者累了的时候,视频是个不错的选择在这里,最后只一句话:祝大家offer拿到手软!!

2401_84424257的博客 641

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

在java中如何处理finally块中的抛出异常以及finally和return的一些细节

文章目录First point :finally和return的小细节回顾One question——finally块中使用return会抑制异常的冒泡传输Second point:finally中可能抛出的异常如何处理? First point :finally和return的小细节回顾 在 finally 代码块中改变返回值并不会改变最后返回的内容。且它一定会被执行! 总结为以下几条: 1、当 try 代码块和 catch 代码块中有 return 语句时,finally 仍然会被执行。 2、执行 t

LH is programming hard 7339

return和finally谁先执行

return和finally谁先执行 finally是什么呢? finally是用于try-catch-finally捕获异常语句中的代码块,其作用为:在进行异常的处理之后,在异常的处理格式中还有一个finally语句,那么此语句将作为异常的统一出口,不管是否产生了异常,最终都要执行此段代码。 用途: finally块一般是用来关闭(释放)物理资源(数据库连接,网络连接,蓝牙连接,磁盘文件等)。 我们面试中可能会遇到一个问题,就是说finally既然是不管发不发生异常都必须执行的语句,那当在try或cat

qq_45722267的博客 453

Java如果在try,catch里面执行return,那么还会不会执行finally?

点赞关注,不会迷路! 总结: 1、不管有没有异常,finally中的代码都会执行 2、当try、catch中有return时,finally中的代码依然会继续执行 3、finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的。 4、如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改...

weixin_50333534的博客 5578

Java面试 - return与finally到底谁先执行?

我们经常会使用try/catch/finally语句块。当然,return关键字使用也是很平常的事,但是不知道大家有没有注意个这样一个问题。当在try语句块里面使用return语句,在finally里面去修改return所要返回的内容会出现什么情况。首先,我们知道return是结束方法的标志,一旦方法执行到return语句就将返回不再往下执行。其次,我们也知道,finally里面的语句是无论方法怎...

qq_40395278的博客 377

Java面试总结—try、catch、finally语句中有return 的各类情况

写在前面: 之前在刷笔试题和面试的时候经常会遇到或者被问到try-catch-finally语法块的执行顺序等问题,今天就抽空整理了一下这个知识点,然后记录下来。 正文 本篇文章主要是通过举例的方式来阐述各种情况,我这里根据 try-catch-finally 语法块分为两种大情况讨论:try-catch 语法块和 try-catch-finally 语句块,然后再在每种情况里再去具体讨论。 一、try-catch 语句块 我们可以看看下面程序: public static void ma..

chen801090的博客 1465

Java面试-try-catch-finally 中的 return 语句执行顺序揭秘

📌 Java面试精要:try-catch-finally中的return执行顺序解析 核心结论: 正常流程:try/catch中的return会先暂存返回值,执行finally后再返回。finally中对基本类型的修改不影响返回值(实验1返回1),但会修改引用对象内容(实验2返回"try-1-finally")。 危险操作:finally中的return会完全覆盖try/catch的返回值(实验4返回3),并可能导致异常丢失(实验5)。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Java finally与return执行顺序详解及面试重点

在Java异常处理机制中,finally块与return语句的执行顺序是理解JVM方法调用栈的关键概念。从字节码层面看,JVM会先将return值压入操作数栈,再执行finally代码,最后返回栈顶值。这种机制确保了资源清理的可靠性,但也可能因返回值被修改导致隐蔽的bug。在数据库连接、文件IO等需要资源释放的场景中,正确理解finally的执行时机尤为重要。根据统计,finally与return相关问题出现在62%的Java开发面试中,涉及字节码指令、局部变量表操作等底层原理。掌握这些知识点不仅能避免线上

weixin_33851604的博客 508

【Java 面试高频考点】finally 与 return 执行顺序 解析

在 Java 面试中,finally与return的执行顺序是高频考察的核心知识点,很多开发者容易混淆二者的执行逻辑。本文将从基本规则、多场景实战分析、特殊风险点、最佳实践等维度,全方位拆解这一知识点,帮你彻底掌握底层执行逻辑。

小旭9527的博客 891

C#面试必问:finally和return的执行顺序详解(附代码演示)

本文深入剖析C#中finally与return的执行顺序,澄清常见误解。通过IL代码解析和实战演示,详解返回值计算、暂存与finally块执行的先后逻辑,并区分值类型与引用类型在finally中修改返回值的不同行为。这是C#面试的核心考点,也是编写健壮代码的关键。

weixin_28419039的博客 341
上一篇: 今天被问微服务,这几点,让面试官刮目相看
下一篇: Spring cloud 之多种方式限流(实战)
交个朋友之猿田地
博客等级 码龄15年 15粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值