Lompati ke konten utama
Modul 5 · Pelajaran 2 dari 210/14 dalam kursus~12 min
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.

Java
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 occurs

Mendeklarasikan 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.

Java
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().

Java
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

Latihan#java.m5.l2.e1
Upaya: 0Memuat…

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'.

Memuat editor…
Tunjukkan petunjuk

Deklarasikan `BufferedReader` dalam tanda kurung tepat setelah `try`, dan terapkan penanganan `IOException`.

Solusi tersedia setelah 3 upaya

Latihan#java.m5.l2.e2
Upaya: 0Memuat…

Buat instance sumber daya kustom CustomResource di dalam blok coba-dengan-sumber daya, aktifkan metode doWork() di dalamnya, dan tangani Pengecualian dengan mencetak 'Kesalahan'.

Memuat editor…
Tunjukkan petunjuk

Gunakan `try (CustomResource res = new CustomResource())` dan panggil `res.doWork();` di dalamnya.

Solusi tersedia setelah 3 upaya

Latihan#java.m5.l2.e3
Upaya: 0Memuat…

Deklarasikan FirstResource dan SecondResource dalam konstruksi coba-dengan-sumber daya yang sama. Tangani Pengecualian dengan mencetak 'Kesalahan'.

Memuat editor…
Tunjukkan petunjuk

Pisahkan deklarasi kedua sumber daya di dalam tanda kurung `coba` menggunakan titik koma `;`.

Solusi tersedia setelah 3 upaya