我刚遇到以下代码:
public class TestFinally {
public static void main(String[] args) {
int returnValue = function();
System.out.println("Return value: " + returnValue);
}
public static int function() {
try {
return 1;
} catch (Exception e){
return 2;
} finally{
return 3;
}
}
}
毫无疑问,运行此代码将产生“返回值:3”的输出。
但是,我对此感到好奇:
提前谢谢了。
干杯,维尔恩
我在Java语言规范中发现的内容至少定义了您的代码段应返回3。当然,它没有提到JVM应该如何实现这一点,以及人们可以做哪些优化。
14.20.2节定义
如果try块的执行由于其他任何原因R突然完成,则将执行finally块。然后有一个选择:
- 如果finally块正常完成,则try语句由于原因R突然完成。
- 如果finally块由于原因S突然完成,则try语句由于原因S突然完成(并且原因R被丢弃)。
第14章的开头(更确切地说是14.1节)指定了什么是正常的突然完成。例如return
,具有给定值的a是突然完成。
因此,在这种情况下,该finally
块会突然完成(原因:return
具有给定的值),因此try
,由于相同的原因,将突然完成(并返回3)。这是在证实有关return语句段14.17以及
如果对表达式的求值正常完成,产生一个值V,则return语句突然完成,原因是返回值为V的返回值。
在实际开发中,根据 try catch 语句的执行过程,try 语句块和 catch 语句块有可能不被完全执行,而有些处理代码则要求必须执行。例如,程序在 try 块里打开了一些物理资源(如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。 Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只回收堆内存中对象所占用的内存。 所以为了确保一定能回收 try 块中打开的物理资源,异
问题内容: 大家。我有一个关于java中返回值的菜鸟问题。这是我的代码。 Eclipse报告“此方法必须返回long类型的结果”错误。但是我确实在try块中返回了提示。eclipse建议在try / catch块之后添加一个返回值,这会破坏逻辑。你能告诉我这里有什么问题吗?谢谢。 问题答案: 当一个被抛出的返回值是不确定的。引发异常时,控制权立即传递给异常处理程序。在这种情况下,您记录错误。然后控
是否有像java try catch finally这样的linux bash命令?还是linux shell总是在运行?
本文向大家介绍说明PowerShell中的Try / Catch / Finally块,包括了说明PowerShell中的Try / Catch / Finally块的使用技巧和注意事项,需要的朋友参考一下 PowerShell中的Try / Catch块用于处理脚本中产生的错误。具体而言,错误应该是终止错误。在最后在PowerShell中块不是强制性的,每次沿写try / catch语句,但它会
本文向大家介绍try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?相关面试题,主要包含被问及try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?时的应答技巧和注意事项,需要的朋友参考一下 finally 一定会执行,即使是 catch 中 return 了,catch 中的 return