java - 最后阻止执行
问题描述
当调用下面的方法时,它的打印输出为 6,但我期望输出为 5,因为我在finally
块中重新分配了 n = 5。
有人可以帮我吗?
public static int p() {
int n = 0;
try {
n = 6 ;
return n;
} catch (Exception e) {
return n;
} finally {
n = 5;
}
}
解决方案
这可以通过了解代码的执行顺序来轻松回答。在您的场景中,您将始终在n
到达最后一个块之前返回 的值,在您的代码中,您将始终返回 的值6
。您将永远不会返回5
(Final Block)或0
(Catch Block)。
那么为什么你永远得不到0
呢?
您永远不会得到0
,因为try
您的语句部分中的代码try-catch-final
在一百万年内永远不会按照它的编写方式抛出任何异常,因此该catch
语句是多余的。
那么为什么你永远得不到5
呢?
你永远不会得到5
,因为执行顺序是块中return
的语句try
首先执行,然后最后一个块运行。语句是我能想到的try-final
唯一语句(很高兴在注释中被证明是错误的)任何代码都在执行 return 语句之后执行。
没有理由在你的场景中你会有最后一个块,除非你不相信垃圾收集器正在做它的工作,在这种情况下你会nullify
在n
这里拥有财产,就是这样。
您的代码可以很容易地重写如下,因为这6
是您的代码将返回的唯一值。
public static int p() {
return 6;
}
推荐阅读
- powershell - -Match 开关未按预期工作
- python - 通过迭代django模型动态获取模型对象值
- apache-spark - Spark withWatermark,仅存储间隙前后的值
- powershell - 来自 Powershell 命令行的 RDP
- angular - 工具提示不适用于 FullCalendar v5 In angular
- variables - 即使关闭窗口,如何访问变量
- tensorflow - TF 模型在 GPU 中产生不同的输出
- c++ - 在写“%15.2f”或类似的东西时,我们可以在 printf 中使用下划线而不是空格吗?
- protocol-buffers - NestJS gRPC 未实现的流式服务器方法
- git - 推送后Gitlab文件夹结构未更新