JavaのリソースWOR-Resourcesステートメントは、使用後に閉じる必要があるファイルストリームやデータベース接続などのリソースの管理を簡素化するように設計されています。このステートメントは、自動リソースブロック管理(ARM)機能の一部としてJava 7で導入されました。
Try-with-resourcesステートメントを使用するには、 try
句内でAutoCloseable
またはそのサブCloseable
を実装するリソース変数を宣言する必要があります。これらのリソースは、コードのブロックが正常に完了するか例外がスローされているかどうかにかかわらず、ステートメントの最後に自動的に閉じられます。
使用方法の例は次のとおりです。
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt"); FileOutputStream fos = new FileOutputStream("output.txt")) { // Use the resources byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } } // fis and fos are automatically closed here</code>
この例では、 FileInputStream
とFileOutputStream
両方がCloseable
実装するため、リソース付きのトライアルセットブロック内で使用できます。ブロックが終了すると、これらのストリームは自動的に閉じられ、 finally
ブロックが手動で閉じる必要がなくなります。
リソース付きのTry-Resourcesステートメントは、 AutoCloseable
インターフェイスを実装する任意のリソースを管理できます。 AutoCloseable
は、Javaのベースインターフェイスで、リソースが不要になったときに自動的に呼び出される単一のメソッドclose()
を定義します。 Closeable
インターフェイスはAutoCloseable
を拡張し、I/O操作を扱うリソースに特別に使用されます。
管理できるリソースの一般的なタイプは次のとおりです。
FileInputStream
やFileOutputStream
など、ファイルから読み取りや書き込みに使用されます。Connection
、 Statement
、 ResultSet
オブジェクトなど。Socket
やServerSocket
など。AutoCloseable
を実装し、閉鎖する必要があるリソースを管理するカスタムクラス。 AutoCloseable
実装することにより、開発者は、リソースを使用して試行ブロック内で使用できる独自のクラスを作成し、適切なリソースのクリーンアップを確保できます。
リソース付きの試みは、いくつかの方法でコードの読みやすさと保守性を向上させます。
finally
ブロックが手動でリソースを閉じる必要性を排除します。これにより、維持するコードが少なくなり、行が少なくなります。finally
ブロックでの例外処理は、 try
ブロックにスローされた例外をマスクまたは干渉することがあります。リソースで試してみると、例外をマスキングせずにリソースが閉鎖されるようにします。これは、伝統的なものとリソースのあるアプローチを比較する例です。
伝統的:
<code class="java">FileInputStream fis = null; try { fis = new FileInputStream("input.txt"); // Use fis } catch (IOException e) { // Handle exception } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { // Handle exception from closing } } }</code>
リソースを試してみてください:
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } // fis is automatically closed</code>
後者ははるかに明確で、リソースを開いたままにする可能性を減らします。
Javaでリソースを使用する場合、コードの堅牢性と明確さを維持するために、例外処理のためにベストプラクティスに従うことが不可欠です。
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } catch (IOException e) { // Handle IOException } catch (Exception e) { // Handle other exceptions }</code>
getSuppressed()
メソッドを使用して、これらの抑制された例外にアクセスできます。<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } catch (IOException e) { for (Throwable se : e.getSuppressed()) { // Handle suppressed exceptions } }</code>
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } catch (IOException e) { for (Throwable se : e.getSuppressed()) { // Handle suppressed exceptions } throw new CustomException("Failed to process file", e); }</code>
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } catch (IOException e) { logger.error("An error occurred while processing the file", e); for (Throwable se : e.getSuppressed()) { logger.error("Suppressed exception occurred", se); } }</code>
これらのプラクティスに従うことにより、リソースを使用してTry-Resourcesを使用してクリーンで効果的な方法で例外を処理し、その堅牢性と保守性の両方を改善することを確認します。
以上が自動リソース管理にJavaのリソース付きステートメントを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。