Pelajaran modul (2/2)
Coba-Dengan-Sumber Daya
Di versi Java yang lebih lama, pengelolaan sumber daya yang memerlukan penutupan eksplisit (seperti file, koneksi database, atau aliran jaringan) memerlukan blok finally wajib untuk memastikan penutupannya. Hal ini menyebabkan kode yang bertele-tele dan rawan kebocoran.
Java 7 memperkenalkan pernyataan coba-dengan-sumber daya, yang menjamin penutupan otomatis semua sumber daya yang dideklarasikan dalam blok try, asalkan sumber daya tersebut mengimplementasikan antarmuka AutoCloseable.
Sintaks
Sumber daya dideklarasikan dan diinisialisasi di dalam tanda kurung tepat setelah kata kunci try.
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line = br.readLine();
System.out.println(line);
} catch (IOException e) {
System.out.println("I/O Error: " + e.getMessage());
}
// br is closed automatically here, even if an exception occursMendeklarasikan Berbagai Sumber Daya
Anda dapat membuat instance beberapa sumber daya di dalam blok try yang sama, memisahkannya dengan titik koma ;. Sumber daya akan ditutup dalam urutan terbalik dari deklarasinya.
try (
FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")
) {
// Use resources
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}Membuat Sumber Daya Kustom
Sumber daya khusus dapat digunakan dalam blok try-with-resources selama sumber daya tersebut mengimplementasikan java.lang.AutoCloseable dan mengganti metode close().
public class DatabaseConnection implements AutoCloseable {
public void query(String sql) {
System.out.println("Running query: " + sql);
}
@Override
public void close() {
System.out.println("Connection closed!");
}
}Cobalah sendiri
Selesaikan metode readFile menggunakan pernyataan try-with-resources untuk menginisialisasi BufferedReader yang membungkus FileReader di jalurnya. Di blok catch, intersepsi IOException dan cetak 'Error reading file'.
Tunjukkan petunjuk
Deklarasikan `BufferedReader` dalam tanda kurung tepat setelah `try`, dan terapkan penanganan `IOException`.
Solusi tersedia setelah 3 upaya
Buat instance sumber daya kustom CustomResource di dalam blok coba-dengan-sumber daya, aktifkan metode doWork() di dalamnya, dan tangani Pengecualian dengan mencetak 'Kesalahan'.
Tunjukkan petunjuk
Gunakan `try (CustomResource res = new CustomResource())` dan panggil `res.doWork();` di dalamnya.
Solusi tersedia setelah 3 upaya
Deklarasikan FirstResource dan SecondResource dalam konstruksi coba-dengan-sumber daya yang sama. Tangani Pengecualian dengan mencetak 'Kesalahan'.
Tunjukkan petunjuk
Pisahkan deklarasi kedua sumber daya di dalam tanda kurung `coba` menggunakan titik koma `;`.
Solusi tersedia setelah 3 upaya