JDK 7 より前は、ファイルは close() メソッドを使用して明示的に閉じられていました。これは既存のコードで一般的に行われていました。
JDK 7 では、ファイル ストリームなどのリソースのクローズを自動化する try-with-resources が導入されました。
try-with-resources の主な利点は、メモリ リークを防止し、リソースが不要になったときに確実に解放されることです。
try-with-resources の基本構造は次のとおりです:
試してください (機能仕様) {
// リソースを使用します
}
リソース仕様はリソースを宣言して初期化し、try ブロックの最後に自動的に閉じられます。
リソースは自動的に管理されるため、close() を明示的に呼び出す必要はありません。
try-with-resources には、catch 句とfinally 句を含めることができます。
AutoCloseable インターフェイスを実装するリソースでのみ使用できます。これには、FileInputStream や FileOutputStream などのストリーム クラスが含まれます。
try-with-resources の実装例は、ShowFile プログラムの修正バージョンです。
プログラムでは、try-with-resources ステートメントを使用してファイルが開かれます。ここで、fin という FileInputStream が宣言されています。
fin 変数は try ブロックに対してローカルであり、ブロックの入力時に作成されます。
try ブロックを終了すると、fin に関連付けられたファイルが自動的に閉じられるため、明示的に close() を呼び出す必要がなくなります。
このアプローチには、自動リソース管理の利点があり、ファイルの閉じ忘れを回避できます。
try ステートメントで宣言されたリソースは暗黙的に最終的なリソースであり、作成後に再定義することはできません。
リソースのスコープは try-with-resources ブロックに制限されています。
各リソース指定をセミコロンで区切って、単一の try ステートメントで複数のリソースを管理することができます。
try-with-resources を使用して fin と fout の両方を管理するように CopyFile プログラムを変更する方法を示す例が提供されています。
try-with-resources の利点:
ファイルなどのリソースは、try ブロックの最後に自動的に閉じられます。
従来のアプローチと比較して、より簡潔で最適化されたコード。
例外処理:
リソースクローズ中の例外は抑制されますが、失われることはありません。
両方の例外 (元の例外と終了した例外) には、抑制された例外リストを通じてアクセスできます。
伝統的なアプローチの知識の重要性:
try-with-resources を使用しない従来のコードを保守するために必要です。
JDK 7 以降のバージョンをサポートしていない環境で作業する場合に重要です。
結論:
最適化された堅牢なリソース管理には、try-with-resources をお勧めします。
プログラマーにとって、従来のアプローチに関する知識は不可欠です。
以上がファイルを自動的に閉じるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。