我正在尝试使用 finally 块而不使用 try/catch 块,但在 Eclipse 中出现错误。
我可以在不使用 try/catch 块的情况下使用 finally 块吗?
我正在尝试使用 finally 块而不使用 try/catch 块,但在 Eclipse 中出现错误。
我可以在不使用 try/catch 块的情况下使用 finally 块吗?
finally
应该至少有一个try
块,catch
是可选的。finally 块的目的是确保无论是否引发异常,都可以清理内容。根据JLS
finally 子句确保 finally 块在 try 块和任何可能执行的 catch 块之后执行,无论控制如何离开 try 块或 catch 块。
因此,afinally
应该总是在一个try
块之前。
您必须有一个带有块try
的finally
块。该try
块定义代码将跟随哪些代码行finally
。try
如果在块之前抛出异常,则finally
代码将不会执行。
添加catch
块是可选的:
try {
// something
} finally {
// guaranteed to run if execution enters the try block
}
如果在 try 块之前抛出异常,finally 代码将不会执行。finally 块总是在 try 块退出时执行。所以你可以使用finally而不用catch,但你必须使用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
}
finally 块总是在 try 块退出时执行。所以你可以使用finally而不用catch,但你必须使用try。
有关更多详细信息,请在此处查看文档
不能没有finally
a的try
原因是因为您可以finally
在同一范围内有多个语句,并且try
指示finally
在发生错误的情况下属于哪个代码块。
另一个有趣的特性finally
是,无论何时try
输入,它都必须执行。例如,如果您使用 agoto
跳过您的finally
语句怎么办?如果在goto
内部,try
它将执行finally
语句,但是如果在语句goto
之上/外部,try
那么它将跳过finally
代码。finally
仅与try
. 如果您没有尝试,那么与finally
任何事情都无关。
try 语句应该有 catch 块或 finally 块,它可以有两个块。
我们不能在 try-catch-finally 块之间编写任何代码。
如果没有 try 语句,我们就不能有 catch 或 finally 子句。
我们可以使用单个 try 语句拥有多个 catch 块。try-catch 块可以嵌套,类似于 if-else 语句。
我们只能有一个带有 try-catch 语句的 finally 块。
来自 Oracle Trails:
finally 块总是在 try 块退出时执行。这样可以确保即使发生意外异常也会执行 finally 块。
从上面的陈述来看,你不能单独拥有 finally 块。以下是允许的组合。
最后尝试抓住
试着抓
最后尝试
finally
如果程序控制流进入相应的块,则保证块内的代码执行try
。所以没有 afinally
没有 a是没有意义的try
。
唯一的例外是程序System.exit(...)
在块之前遇到调用finally
,因为这会关闭虚拟机。
不,你不能
你可以使用Try-catch-finally
或try-finally
try {
}catch (Exception e){
}
finally{
}
或者
try {
}
finally{
}