27

try/catch ブロックを使用せずに finally ブロックを使用しようとしていますが、Eclipse でエラーが発生します。

try/catch ブロックを使用せずに finally ブロックを使用できますか?

4

11 に答える 11

20

finally少なくともtryブロックcatchが必要です。オプションです。finally ブロックのポイントは、例外がスローされたかどうかに関係なく、確実にクリーンアップされるようにすることです。JLSによると

finally 句は、制御が try ブロックまたは catch ブロックを離れた場合でも、try ブロックおよび実行される可能性のあるすべての catch ブロックの後に、finally ブロックが実行されることを保証します。

したがって、a のfinally前には常にtryブロックが必要です。

于 2013-06-26T08:06:42.433 に答える
8

tryブロックにはブロックが必要finallyです。このtryブロックは、コードのどの行の後にコードが続くかを定義しfinallyます。tryブロックの前に例外がスローされた場合、finallyコードは実行されません。

catchブロックの追加はオプションです:

try {

  // something

} finally {
  // guaranteed to run if execution enters the try block
}
于 2013-06-26T08:06:51.810 に答える
3

try ブロックが終了すると、finally ブロックが常に実行されます。したがって、catch なしで finally を使用できますが、try を使用する必要があります。

詳細については、こちらのドキュメントを確認してください

于 2013-06-26T08:07:31.140 に答える
2

finallyaなしで aを使用できない理由は、同じスコープ内に複数のステートメントを含めるtryことができ、エラーが発生した場合に関連するコードのブロックを示すためです。finallytryfinally

のもう 1 つの興味深い機能は、finallyがいつtry入力されても実行する必要があることです。たとえば、a を使用してステートメントgotoをスキップするとどうなるでしょうか。が の内側にあるfinally場合はステートメントを実行しますが、 がステートメントの上/外側にある場合はコードをスキップします。で囲まれたコードにのみ関連します。試してみない場合は、何にも関係ありません。gototryfinallygototryfinallyfinallytryfinally

于 2013-06-26T08:28:17.790 に答える
0
  • try ブロックだけを使用するのは正しくありません。
  • try ブロックは、catch または finally ブロックからの 1 つのブロックのみで使用できます。
  • try ブロックを catch および finally と共に使用できます。finally ブロックを try ブロックと共に使用すると、catch ブロックはオプションになります。
于 2015-04-29T04:51:46.057 に答える
0

オラクルトレイルから:

try ブロックが終了すると、finally ブロックが常に実行されます。これにより、予期しない例外が発生した場合でも、finally ブロックが実行されます。

上記のステートメントから、finally ブロックを単独で使用することはできません。以下は許可されている組み合わせです。

  1. 最後にキャッチしてみてください

  2. キャッチしてみてください

  3. 最後に試してください

于 2013-06-26T08:11:10.763 に答える
0

finallyプログラム制御フローが対応するブロックに入ると、ブロック内のコードが実行されることが保証されtryます。finallyしたがって、なしで を使用しても意味がありませんtry

これに対する唯一の例外は、仮想マシンをシャットダウンするため、プログラムがブロックのSystem.exit(...)前に呼び出しに遭遇した場合です。finally

于 2013-06-26T08:13:59.553 に答える
0

いいえ、できません

Try-catch-finallyまたは使用できますtry-finally

 try {

    }catch (Exception e){

    }
    finally{

    }

また

try {

    }
    finally{

    }
于 2013-06-26T08:14:41.260 に答える