java - 最后在java中块覆盖
问题描述
下面给出了我关于一个简单的 finally 块的示例。
public class Ex2 {
public static void main(String args[]) throws ArithmeticException {
System.out.println(Ex2.myTestingFuncn());
}
public static int myTestingFuncn() {
try {
// first execution
return 5;
} finally {
// second execution
System.out.println("finally");
}
}
}
这个结果符合
finally
5
预期。
但是当这种情况发生时,finally 块会覆盖 try 块的值。
try {
// first execution
return 5;
} finally {
// second execution
return 12;
}
结果:12
这是怎么发生的?我的意思是这些块的执行顺序是什么?
请帮忙。
谢谢
解决方案
在您的第一个示例中,您使用了System.out.println
2 次。第一次调用函数时,第二次调用函数内部。所以他会首先打印“finally”,因为这是你的函数中执行的最后一个块。最后打印 5 的原因是因为这是您调用的函数的输出。(执行函数后,输出为 5)因为“finally”在函数内部打印,显然它会首先显示(因为它在运行时打印)然后,被调用函数的实际输出将被打印. 不要System.out.println
在你的函数内部使用它可能会让你感到困惑:)
System.out.println
意味着当您到达代码所在的地方时将其打印出来。( = 在运行时)
在您的第二个示例中,返回值本身被覆盖。在第一个示例中,您只有 1 个返回值和一个System.out.println
语句,它们彼此没有影响。
希望这可以帮助。
推荐阅读
- struts2 - xml中的struts 2重定向(type =“redirect-Action”,type =“redirect”)重定向到http而不是https
- python - 检查整数列表中的所有元素是否为 0 的最节省时间/空间的方法
- java - 数据库中保存的错误日期(LocalDate)
- javascript - Vue导入简写或一行语句
- java - 任务执行失败:compileDebugJavaWithJavac
- java - Java 8 流收集
- ios - 我想在 UIDatePicker 中设置 1 小时的间隔
- python - 如何用另一列减去熊猫中的排除标志
- scala - scala中的文件锁定
- asp.net-web-api - WebAPI 中是否需要 ValidateAntiForgeryToken