我尝试在不使用 try/catch 块的情况下使用 finally 块,但在 Eclipse 中出现了错误。
我能否在不使用 try/catch 块的情况下使用 finally 块?
finally
至少应该有一个 try
块,catch
是可选的。finally块的目的是确保无论是否抛出异常,都可以清理掉东西。根据JLS的规定:
因此,finally字句确保 finally 块在执行 try 块和任何可能被执行的 catch 块之后执行,无论控制如何离开 try 块或 catch 块。
finally
应始终紧跟在try
块之后。try {
// something
} finally {
// guaranteed to run if execution enters the try block
}
如果在try块之前抛出异常,则finally代码将不会执行。当try块退出时,finally块始终执行。因此,您可以在没有catch的情况下使用finally,但必须使用try。
try {
// Block of code with multiple exit points
}
finally {
// Block of code that must always be executed when the try block
// is exited, no matter how the try block is exited
}
try
的情况下使用finally
的原因是,你可以在同一作用域内有多个finally
语句,而try
指示了finally
所属的代码块,以防发生错误。
finally
的另一个有趣特性是,当进入try
时,它必须无论如何执行。例如,如果你使用goto
跳过finally
语句会怎样?如果goto
在try
内部,则会执行finally
语句;但是,如果goto
在try
语句之上/之外,则会跳过finally
代码。 finally
仅与被包含在try
中的代码相关。如果没有try
,则finally
对任何内容都不相关。try语句应该有catch块或finally块,也可以同时拥有这两个块。
在try-catch-finally块之间我们不能编写任何代码。
如果没有try语句,我们就不能有catch或finally子句。
我们可以在一个try语句中有多个catch块。try-catch块可以像if-else语句一样嵌套。
在一个try-catch语句中只能有一个finally块。
不可以。
你可以使用 Try-catch-finally
或 try-finally
。
try {
}catch (Exception e){
}
finally{
}
或者
try {
}
finally{
}
来自Oracle Trails:
当try块退出时,finally块总是执行。这确保了即使发生意外异常,也会执行finally块。
从上述语句中可以看出,你不能单独使用finally块。以下是允许的组合。
try catch finally
try catch
try finally
try
的情况下使用finally
,但如果您使用goto
跳过finally
语句,您希望finally
如何运行呢?finally
仅与使用try
语句标记为相关的代码相关。否则,行为将非常恼人。 - CodeCamper