2012-04-01 3 views
9

finally節の中にtryとcatchを書くのは悪いプログラミングだと考えられますか?finallyセクションにキャッチしよう

私は自分のメインメソッドで、閉じたいfileInputStreamを持っています。 私は最後に.close()を配置したいので、何があっても閉じます。 P

}finally{ 
     try { 
      commandFile.close(); 
     } catch (IOException e) { 
      throwException(e); 
     } 
    } 

それはokです:私はそれが主な方法であるとして、mainメソッドに宣言をスロー追加したくありませんか? ありがとう

+8

はい、これはOKで、時には必要です。 –

+1

例外を再現しようとしているのであれば、try catchは必要ありません。試しにキャッチする必要があるのは、例外なく(最小限のロギングで)何かをすることになっているからです。 – SJuan76

+0

System.errに何かを印刷し、次にSystem.exitを出力する必要があります これはthrowExcpetion(e)メソッドの機能です –

答えて

9

最終的なメソッドでtry/catchを必要とするパターンは、残念ながらJava 6以前では繰り返しパターンです。私は実際には悪い習慣だと主張しますが、あなたがJava 6で本当に避けることのできるものではないと主張します(Java 7については以下を参照)。

finallyブロックでスローされた新しい例外は、このブロックに到達する前にスローされた例外をオーバーライドするという追加の問題です。

Java 7では、リソースを閉じる必要がある場合(try/finally/try/catch構造の大部分の使用例)、新しいtry-with-resources構造があります。これにより、プライマリとセカンダリの両方の例外もキャプチャされます。

は、この構文を使用することになりましたので、JDK 7でのベストプラクティスであるとはい、あなたが表示されたコードは、このようにするJava 7の悪い習慣

+0

私はJava 6のみを使用する義務があります。学校はまだ7の認可を受けていません。 –

関連する問題