据我所知,以下两个代码片段都将起到同样的作用.为什么要有finally块?
代码A:
try { /* Some code */ }
catch { /* Exception handling code */ }
finally { /* Cleanup code */ }
Run Code Online (Sandbox Code Playgroud)
代码B:
try { /* Some code */ }
catch { /* Exception handling code */ }
// Cleanup code
Run Code Online (Sandbox Code Playgroud) 在try中有3个try ... catch ... finally块的排列.
执行finally块后,控制转到finally块之后的下一行.如果我删除finally块并将其所有语句移到try ... catch块之后的行中,那么它与finally块中的它们具有相同的效果吗?
我何时应该使用代码段A而不是代码段B(即使用代码段A的好处是什么)?:
片段A:
try {
// codeblock A
}
catch (Exception ex) {
// codeblock B
}
finally {
//codeblock C
}
Run Code Online (Sandbox Code Playgroud)
代码片段B:
try {
// codeblock A
}
catch (Exception ex) {
// codeblock B
}
//codeblock C
Run Code Online (Sandbox Code Playgroud) 我在采访中得到了以下问题:
如果在try或catch块上调用return语句或System.exit会发生什么?最后会阻止执行吗?
finally块总是被执行吗?
编辑: 在java中尝试上述后:
finally 如果我在try块或catch块中放入return语句,则执行block
finally 如果我调用System.exit表单try或catch,则块不会运行.
我不知道背后的原因.
我想知道为什么测试finally后有用try catch呢?在任何情况下,finally将执行语句后定义的代码.
这两个代码有什么区别?
try{
int a = 1 / 0;
} catch(ArithmeticException e){
System.out.print("Hi");
} finally {
System.out.print("It's me again...");
}
Run Code Online (Sandbox Code Playgroud)
并且:
try{
int a = 1 / 0;
} catch(ArithmeticException e){
System.out.print("Hi");
}
System.out.print("It's me again...");
Run Code Online (Sandbox Code Playgroud)
即使出现错误,"It's me again..."也会显示..
可能重复:
finally块是否始终运行?
我了解到try catch语句的finally子句总是执行.但有些人告诉我,可以避免执行它(删除它不是一个选项).
- 有人怎么可能?
- 我很想知道为什么有人想避免执行它?