10

Netbeans 7.1.2 に次のコードがあります。

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filename));
bos.write(newRawData);
bos.close();

「try-with-resources に変換する」ことを示唆する警告が表示されます。これを選択すると、コードは次のようになります。

try (BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
        bufferedFos.write(newRawData);
    }

これは、C# の using(...) の構文に似ていますが、同じように機能しますか? この 2 番目の形式を使用することの欠点はありますか? が無いのが気にbos.close();なりますが、このフォーマットでは必要ないのでしょうか?

4

2 に答える 2

14

これは、Java 7 で導入された新しい構文であり、try(...)ステートメントを宣言するときに指定したすべてのリソースを閉じます。詳細については、こちらをご覧ください
いいえ、する必要はありませんbos.close().Javaによって実行されます。座ってリラックスできます。
唯一の欠点は、コードが Java 7+ でのみ機能することです。

于 2012-07-11T20:09:34.933 に答える
5

ノート

「trywithresources」ステートメントは、ステートメントの代わりとしてJava7で導入されましtry...finallyた。基本的に、それが行うのは、追加する必要がないようにすることだけです。

finally {
  if(resource != null) resource.close();
}

tryあなたの声明の終わりまで。これを使用する場合、コードはJava7以降でのみ機能します。

答え

tryは、と呼ばれるJavaのステートメントの一部ですtry...catch。与えられた警告の完全な解決策は次のとおりです。

try(BufferedOutputStream bufferedFos = new BufferedOutputStream(new FileOutputStream(filename))) {
  bufferedFos.write(newRawData);
} catch(FileNotFoundException e) {
  e.printStackTrace();
}

「リソースを試す」ブロックは、ブロックと同じ構造を使用しtry...catchますが、実行されると、ブロック内に作成されたすべてのリソースを自動的に閉じます。bufferedFos.close();そのため、コードにステートメントが表示されません。

于 2012-07-11T20:16:08.923 に答える