首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从Java中的finally块返回

从Java中的finally块返回是一个有趣的问题。在Java中,finally块是一个异常处理机制的一部分,用于确保在异常发生后,资源得到适当的清理和关闭。finally块中的代码总是在try和catch块之后执行,无论是否发生异常。

在Java中,finally块中的代码不会影响返回值。如果在try或catch块中有返回语句,则finally块不会影响方法的返回值。但是,如果在finally块中有return语句,则该方法的返回值将由finally块中的return语句决定。

例如:

代码语言:java
复制
public int example() {
    try {
        return 1;
    } catch (Exception e) {
        return 2;
    } finally {
        return 3;
    }
}

在这个例子中,尽管在try块中有返回1的语句,但是finally块中的return 3将覆盖这个返回值,因此example方法的返回值将是3。

总之,从Java中的finally块返回是可能的,但是需要注意finally块中的return语句可能会覆盖try和catch块中的返回值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Javatry-finally执行顺序

本文主要介绍关于异常处理时候try-catch-finally执行顺序,一般情况下,finally是会执行,在Java,try-finally执行顺序通常遵循以下规则: try代码首先被执行...如果try代码执行完毕,控制流将转到finally。无论try代码是否抛出异常,finally代码都将被执行。...如果finally没有return语句,不管怎么改变变量,返回结果还是try改变值。...总结: finally语句在try和catch语句中return执行后、返回前执行; 若finally语句中没有return,则其执行结果不影响try和catch已确定返回值; 若finally语句中有...tryfinally中都有return,所以最终返回结果就是finallyreturn结果。 ​我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

22350

字节码分析finally对return返回影响

Exception) Exception之外异常变量 临时存储变量(返回临时存储返回) args_size=1: 方法参数个数(该方法无参数,为什么这里args_size为1呢?...(执行finally代码对返回值无影响) 第[12]行,catch代码: (Exception e) 第[13-14]行,catch代码: i=2 第[15-16]行,遇到catchreturn...第[18-19]行,finally代码:i=3 第[20-22]行,执行catchreturn语句,把临时存储 i 值返回。...(执行finally代码对返回值无影响) 第[23]行,局部变量表存储Exception之外异常 第[24-25]行,finally代码:i=3 第[26-27]行,将Exception之外异常压入栈顶...,并抛出(无返回值) 结论 通过字节码,我们发现,在try语句return,return 返回变量并不是直接返回 i 值,而是在执行finally之前把i值存储在临时区域,当执行return时直接返回临时区域中

93360

Java finally 代码代码一定会执行吗?

1、前言 对于很多初学者而言,会想当然地认为 “finally 代码一定会被执行”,因此我们可以看下面这个案例: public class Demo { public static void...{ System.out.println("Exiting the program"); } } } 问题是:该段代码 finally 代码一定会被执行吗...2、问题分析 通常实际编码时,捕获异常后会记录日志或者将异常抛出等,此时 finally 代码一般肯定会被执行到。 那么如何才能不执行finally呢?...是否一定不会执行到 finally 代码呢?...因此如果我们可以修改 SecurityManager 如果检查退出时抛出异常,那么在执行System.exit(2) 时就会发生异常,最终依然会执行到 finally代码

42350

Java 异常处理中篇:finally 陷阱(finally return 会发生什么)

当我们在 finally 中使用 return 时,try 或 catch return 会失效或异常丢失(见下文),会在 finally 直接返回。...我们可以得出结论在 finally 修改基本类型不会影响 try 、catch return 返回值(但是会影响 finally return ,见下面的案例)。...,返回其实是一个地址,在案例一我们使用地址修改了原内容,而在案例二,我们其实将 person 指向了新地址(new Person()),因此并没有修改原返回值地址内容。...Edition》 一书中我们可以知道 Java 虚拟机是如何编译 finally:实际上,Java 虚拟机会把 finally 语句作为 subroutine 直接插入到 try 语句或者 catch...还有另外一个不可忽视因素,那就是在执行 subroutine(也就是 finally 语句)之前,try 或者 catch 语句会保留其返回值(基本类型值或地址)到本地变量表(Local Variable

25771

Java陷阱之:finally抛出异常或return导致异常丢失

---- 现象 ---- javafinally语句包含有抛出异常或者return语句,会把try中出现异常丢弃。...39) Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing) finally抛出异常 public...(FinallyLostException.java:8) finally异常覆盖了try异常。...其实,这个是java异常设计缺陷,没能像C++一样处理。业务碰到过finally抛出异常,导致原本呈现在日志try异常堆栈丢失。 java编程思想一本书中也谈到了这个现象。...总结 ---- finally抛出异常或return导致异常丢失,我们一定在finally不要包含return语句,并且finally所有代码必须try catch Throwable 打印异常堆栈

69020

Java关于try、catch、finally细节分析

" 第11-12行,把第二个变量对应返回 通过字节码,我们发现,在 try 语句 return ,return 返回引用变量( t 是引用类型)并不是try语句外定义引用变量t,而是系统重新定义了一个局部引用...可能 jvm 认为一个方法里面有两个 return 语句并没有太大意义,所以 try return 语句给忽略了,直接起作用finally return 语句,所以这次返回是 "finally...try catch 运行逻辑和上面例子一样,当catch 语句里面抛出异常之后,进入 finally 语句快,然后返回 t 。...总结 try、catch、finally 语句中,在如果 try 语句有 return 语句,则返回当前 try 变量指向值,此后 变量 指向改变都不会影响 try return 返回 如果...finally 中有 return 语句,则 try 或 catch 返回语句会被忽略 如果 finally 抛出异常,则整个 try、catch、finally抛出异常 【强制】不要在

99060

Java避坑指南:finally陷阱及正确关闭资源方式小结

---- 正确关闭资源方式 ---- 1、使用finally来关闭资源,保证关闭操作总是会被执行; 2、关闭每个资源之前首先判断资源引用变量不为null,避免NPE发生; 3、为每个资源使用单独...try...catch 关闭,保证关闭此资源发生异常,不会影响后面资源关闭; 4、finally不要使用return语句。...return语句直接导致方法结束,不会再跳回去执行try、catch任何代码; 5、不要出现System.exit(0),会直接停止当前线程,finally不会执行; 6、finally不要抛出异常...,如果抛出异常,finally异常会覆盖try抛出异常,导致莫名奇怪现象; 参见:Java陷阱之:finally抛出异常或return导致异常丢失 Java陷阱之:finally抛出异常或...return导致异常丢失 7、使用try-with-resources语句; import java.io.File; import java.io.IOException; import java.io.PrintWriter

27030

pythonfinally

重点部分用粗体标出了,翻成中文就是try包含break、continue或者return语句,在离开try之前,finally语句也会被执行。...所以在上面的例子,func1() ,在tryreturn之前,会执行finally语句,tryreturn被忽略了,最终返回值是finallyreturn值。...func2() ,try抛出异常,被except捕获,在exceptreturn之前,执行finally语句,exceptreturn被忽略,最终返回值是finallyreturn值...类型,try抛出异常没有被捕获到,所以except语句没有被执行,但不论异常有没有被捕获,finally还是会执行,最终函数返回finally返回值3。...实际应用,不推荐在finally中使用return返回

39410

Java final、finally、finalize 有什么不同?

Java final、finally、finalize 有什么不同?这是在 Java 面试中经常问到问题,他们究竟有什么不同呢?...finallyJava 保证重点代码一定要被执行一种机制。...需要关闭连接等资源,更推荐使用 Java 7 添加 try-with-resources 语句,因为通常 Java 平台能够更好地处理异常情况,还可以减少代码量。...} }finally{ System.out.println("ummm"); } // 线程被杀死 当执行 try-finally 线程被杀死时,finally 代码也无法执行。...总结 这篇文章首先从语法角度分析了 final、finally、finalize,并从安全、性能、垃圾收集等方面逐步深入,详细地讲解了 final、finally、finalize 三者区别。

84421

Javafinal、finally、finalize区别与用法

2)被声明final方法只能使用,不能重载。 finallyjava一种异常处理机制。   finally是对Java异常处理模型最佳补充。finally结构使代码总会执行,而不管无异常发生。...finalize:Java一个方法名。 Java技术使用finalize()方法在垃圾收集器将对象内存清除出去前,做必要清理工作。...被final修饰变量必须被初始化。初始化方式以下几种: 1.在定义时候初始化。 2.final变量可以在初始化初始化,不可以在静态初始化初始化。...3.静态final变量可以在定义时初始化,也可以在静态初始化初始化,不可以在初始化初始化。 4.final变量还可以在类构造器初始化,但是静态final变量不可以。...输出结果来看,return语句似乎在finally语句之前执行了,事实真的如此吗?我们来想想看,return语句作用是什么呢?是退出当前方法,并将值或对象返回

32420

Pythonfinally

PythonModula-3语言得到了关于异常处理灵感,其异常处理也使用了如上方法,与Java、C#等语言异常处理很相像,所以本文对finally讨论相信也适用于这两种语言,不过我并没有实际测试过...如下几个细节讨论finally特性。...1、tryreturn: 当在try语句中含有return语句时,执行到return并不会直接返回,而是由Python忠实再去执行finally语句之后再执行return。...(by gashero)从这里可以看出,只要程序没有突然终止,则finally资源释放语句一定会执行。无论发生什么异常都会执行到finally语句代码。 2、finally之后呢?...实际测试看来,finally之后,try语句抛出异常并没有被处理,而是直接被抛出到try...finally语句之外了。并且是在finally语句执行之后继续抛出这个异常

53330

关于Javareturn和finally执行顺序

即使有return语句,finally在执行完try或者catch代码之后是会被调用,但是特殊情况下finally语句是不会被执行,如下几种情况: (1)在try和catch之中执行System.exit...(1)在finally中使用return语句,虽然java是支持,但一旦在finally中使用return那么try和catchreturn就不会被执行。...(2)不要在finally修改变量数据,比如赋值类操作。 上面的这两种编程习惯,在java层面都是支持,这样代码虽然能正常运行,但是可读性非常差而且难以维护。...总结: finally语句Java里面最大作用是避免资源泄露问题,通常用于当程序发生异常或者正常执行结束时用来关闭各种资源连接,所以在使用时候一定要注意,尽量不要做一些其他业务逻辑或者在里面使用...return语句从而避免其导致不可预料或者难以维护问题。

63630

then, catch, finally如何影响返回Promise实例状态

回调抛出了异常,那么.catch返回Promise实例状态也将变成rejected。...实例状态也取决于onFinally返回值是什么,以及onFinally是否抛出异常。...你可以通过修改以下代码注释部分来验证,不同返回值对于finally返回Promise实例状态影响。...如果回调函数抛出了异常,那么.then, .catch或.finally返回Promise实例状态就是rejected,并且reason是所抛出异常对象e。...如何理解then抛出异常后会触发随后catch 由于.then会返回一个新Promise实例,而在.then回调抛出了异常,导致这个新Promise状态变成了rejected,而.catch正是用于处理这个新

1.1K10

【Kotlin 协程】Flow 流收尾工作 ( finally 代码收尾 | onCompletion 代码收尾 | onCompletion 获取异常信息 | catch 代码捕获异常 )

文章目录 一、Flow 流收尾工作 二、onCompletion 函数原型 三、finally 代码收尾 四、onCompletion 代码收尾 五、onCompletion 代码获取异常信息...出现异常终止收集元素操作 Flow 流收尾工作可以借助以下方案执行 : 在 finally 代码中进行收尾工作 在 onCompletion 代码中进行收尾 在 onCompletion 代码中进行收尾...函数原型如下 : /** * 在**流完成或取消后,返回一个调用给定[action] **流 * 作为[action]原因参数取消异常或失败。...* * 概念上讲,' onCompletion '类似于将流集合包装成' finally ', * 例如下面的命令代码片段: * * ``` * try { * myFlow.collect...PID: 29378 SIG: 9 六、catch 代码捕获异常 ---- 上面章节中介绍了 在 Flow#onCompletion 可以执行收尾 , 同时可以查看出现异常 , 但是无法捕获处理异常

52020
领券