在Java中,如果我们在里面插入一个return语句,那么finally块是否会被执行 try-catch-finally的尝试块?
答案 0 :(得分:23)
只有在finally
到达exit()
之前调用finally
时才会执行exit()
阻止。 {{1}}调用将关闭JVM,因此不会运行任何后续代码行。
编辑:这不完全正确。有关其他信息,请参阅以下注释。
答案 1 :(得分:9)
无论你是否返回,finally块总是会执行,或者在try块中抛出异常。
另见Java语言规范的14.19.2 Execution of try-catch-finally部分
答案 2 :(得分:3)
在所有这些情况下都会执行finally块。最后执行finally块的目的是允许您释放所有获取的资源。
以下是一个展示其工作原理的示例。
public class Hello {
public static void hello(){
try{
System.out.println("hi");
return;
}catch(RuntimeException e){
}finally{
System.out.println("finally");
}
}
public static void main(String[] args){
hello();
}
}
答案 3 :(得分:2)
即使您在try块内返回也会执行。我把一个return语句放在try里面,最后放在一个里面,返回的值是来自finally,而不是try。
public class HelloWorld{
public static void main(String args[]){
System.out.println(printSomething());
}
public static String printSomething(){
try{
return "tried";
} finally{
return "finally";
}
}
}
我得到的输出是“终于。”
答案 4 :(得分:0)
注意:如果在执行try或catch代码时JVM退出,则finally块可能无法执行。同样,如果执行try或catch代码的线程被中断或终止,则即使整个应用程序仍在继续,finally块也可能无法执行。
我认为在我们发布答案之前我们应该参考官方网站是个好主意。
答案 5 :(得分:0)
当方法试图通过未捕获的异常或显式返回语句返回调用者时,finally子句也会在方法返回之前执行。
答案 6 :(得分:-3)
如果您按其他人的说法致电System.exit()
,则不会执行,但我相信如果在except块中存在异常,也不会执行