Kenyataan cubaan Java-dengan-sumber direka untuk memudahkan pengurusan sumber, seperti aliran fail atau sambungan pangkalan data, yang perlu ditutup selepas penggunaannya. Kenyataan ini diperkenalkan di Java 7 sebagai sebahagian daripada ciri Pengurusan Blok Sumber Automatik (ARM).
Untuk menggunakan pernyataan Try-With-Resources, anda perlu mengisytiharkan pembolehubah sumber yang melaksanakan AutoCloseable
atau subinterface Closeable
dalam klausa try
. Sumber -sumber ini akan ditutup secara automatik pada akhir pernyataan, sama ada blok kod selesai secara normal atau pengecualian dilemparkan.
Inilah contoh cara menggunakannya:
<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>
Dalam contoh ini, FileInputStream
dan FileOutputStream
kedua-duanya dilaksanakan Closeable
, supaya mereka boleh digunakan dalam blok Cuba-dengan-Resources. Sebaik sahaja blok berakhir, aliran ini ditutup secara automatik, menghapuskan keperluan untuk blok finally
untuk menutupnya secara manual.
Kenyataan cubaan-dengan-sumber boleh menguruskan sebarang sumber yang melaksanakan antara muka AutoCloseable
. AutoCloseable
adalah antara muka asas di Java yang mentakrifkan satu kaedah close()
yang dipanggil secara automatik apabila sumber tidak lagi diperlukan. Antaramuka Closeable
memanjangkan AutoCloseable
dan digunakan khusus untuk sumber yang menangani operasi I/O.
Jenis sumber biasa yang boleh diuruskan termasuk:
FileInputStream
dan FileOutputStream
, yang digunakan untuk membaca dan menulis ke fail.Connection
, Statement
, dan objek ResultSet
yang digunakan untuk operasi pangkalan data.Socket
dan ServerSocket
yang digunakan untuk komunikasi rangkaian.AutoCloseable
dan menguruskan sumber yang perlu ditutup. Dengan melaksanakan AutoCloseable
, pemaju boleh membuat kelas mereka sendiri yang boleh digunakan dalam blok cubaan-dengan-sumber, memastikan pembersihan sumber yang betul.
Kenyataan cubaan-dengan-sumber meningkatkan kebolehbacaan dan kebolehkerjaan kod dalam beberapa cara:
finally
untuk sumber secara manual. Ini menghasilkan kurang kod dan lebih sedikit baris untuk mengekalkan.finally
kadang-kadang boleh menutup atau mengganggu pengecualian yang dilemparkan di blok try
. Cuba-dengan sumber-sumber memastikan bahawa sumber ditutup tanpa menutup sebarang pengecualian.Berikut adalah contoh yang membandingkan pendekatan tradisional dan cuba-dengan-sumber:
Tradisional:
<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>
Cuba-dengan-sumber:
<code class="java">try (FileInputStream fis = new FileInputStream("input.txt")) { // Use fis } // fis is automatically closed</code>
Yang terakhir adalah lebih jelas dan mengurangkan peluang meninggalkan sumber terbuka.
Apabila menggunakan sumber cuba di Java, penting untuk mengikuti amalan terbaik untuk pengendalian pengecualian untuk mengekalkan keteguhan dan kejelasan kod anda:
<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>
Dengan mengikuti amalan-amalan ini, anda memastikan bahawa kod anda menggunakan sumber cuba-dengan mengendalikan pengecualian dengan cara yang bersih dan berkesan, meningkatkan keteguhan dan penyelenggaraannya.
Atas ialah kandungan terperinci Bagaimanakah saya menggunakan pernyataan cubaan Java untuk pengurusan sumber automatik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!