27

我正在尝试使用 finally 块而不使用 try/catch 块,但在 Eclipse 中出现错误。

我可以在不使用 try/catch 块的情况下使用 finally 块吗?

4

11 回答 11

20

finally应该至少有一个try块,catch是可选的。finally 块的目的是确保无论是否引发异常,都可以清理内容。根据JLS

finally 子句确保 finally 块在 try 块和任何可能执行的 catch 块之后执行,无论控制如何离开 try 块或 catch 块。

因此,afinally应该总是在一个try块之前。

于 2013-06-26T08:06:42.433 回答
8

您必须有一个带有块tryfinally块。该try块定义代码将跟随哪些代码行finallytry如果在块之前抛出异常,则finally代码将不会执行。

添加catch块是可选的:

try {

  // something

} finally {
  // guaranteed to run if execution enters the try block
}
于 2013-06-26T08:06:51.810 回答
6

如果在 try 块之前抛出异常,finally 代码将不会执行。finally 块总是在 try 块退出时执行。所以你可以使用finally而不用catch,但你必须使用try。

于 2019-01-15T05:13:43.777 回答
5
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
}
于 2015-04-29T07:26:24.840 回答
3

finally 块总是在 try 块退出时执行。所以你可以使用finally而不用catch,但你必须使用try。

有关更多详细信息,请在此处查看文档

于 2013-06-26T08:07:31.140 回答
2

不能没有finallya的try原因是因为您可以finally在同一范围内有多个语句,并且try指示finally在发生错误的情况下属于哪个代码块。

另一个有趣的特性finally是,无论何时try输入,它都必须执行。例如,如果您使用 agoto跳过您的finally语句怎么办?如果在goto内部,try它将执行finally语句,但是如果在语句goto之上/外部,try那么它将跳过finally代码。finally仅与try. 如果您没有尝试,那么与finally任何事情都无关。

于 2013-06-26T08:28:17.790 回答
1
  • try 语句应该有 catch 块或 finally 块,它可以有两个块。

  • 我们不能在 try-catch-finally 块之间编写任何代码。

  • 如果没有 try 语句,我们就不能有 catch 或 finally 子句。

  • 我们可以使用单个 try 语句拥有多个 catch 块。try-catch 块可以嵌套,类似于 if-else 语句。

  • 我们只能有一个带有 try-catch 语句的 finally 块。

于 2018-08-07T05:51:23.510 回答
0

来自 Oracle Trails:

finally 块总是在 try 块退出时执行。这样可以确保即使发生意外异常也会执行 finally 块。

从上面的陈述来看,你不能单独拥有 finally 块。以下是允许的组合。

  1. 最后尝试抓住

  2. 试着抓

  3. 最后尝试

于 2013-06-26T08:11:10.763 回答
0

finally如果程序控制流进入相应的块,则保证块内的代码执行try。所以没有 afinally没有 a是没有意义的try

唯一的例外是程序System.exit(...)在块之前遇到调用finally,因为这会关闭虚拟机。

于 2013-06-26T08:13:59.553 回答
0

不,你不能

你可以使用Try-catch-finallytry-finally

 try {

    }catch (Exception e){

    }
    finally{

    }

或者

try {

    }
    finally{

    }
于 2013-06-26T08:14:41.260 回答
0
  • 仅使用 try 块是不正确的。
  • Try 块只能与 catch 或 finally 块中的一个块一起使用。
  • 您可以将 try 块与 catch 和 finally 一起使用。如果您将 finally 块与 try 块一起使用,则 catch 块成为可选的。
于 2015-04-29T04:51:46.057 回答