0Pricing
Java Academy · Pelajaran

Menutup Aliran dengan Aman

try-with-resources

Menutup Aliran dengan Aman adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Mengapa Aliran Perlu Ditutup

Aliran seperti BufferedReader menahan sumber daya sistem — deskriptor berkas, penyangga memori, dan koneksi. Jika Anda tidak pernah menutupnya, sumber daya tersebut dapat bocor.

Menutup aliran membebaskan apa pun yang ditahannya dan mengosongkan data yang masih menunggu. Pelajaran ini menunjukkan cara melakukannya dengan aman.

Metode close

Setiap pembaca memiliki metode close(). Memanggilnya akan melepaskan sumber daya.

Untuk BufferedReader yang membungkus System.in, penutupan juga menutup aliran dasar yang dibungkusnya.

BufferedReader br =
    new BufferedReader(new InputStreamReader(System.in));
// ... use br ...
br.close();

Cara Lama yang Berisiko

Anda dapat memanggil close() secara manual, tetapi jika galat terjadi sebelum baris tersebut dijalankan, close() akan dilewati dan sumber daya pun bocor.

Menempatkan close() di dalam blok finally membantu, tetapi cara ini panjang dan mudah dilakukan dengan keliru.

BufferedReader br = null;
try {
    br = new BufferedReader(
        new InputStreamReader(System.in));
    // ... use br ...
} finally {
    if (br != null) br.close();
}

try dengan sumber daya

Java memiliki solusi yang lebih bersih: try dengan sumber daya. Anda mendeklarasikan aliran di dalam tanda kurung setelah try, lalu Java secara otomatis menutupnya ketika blok berakhir — bahkan jika terjadi galat.

Tidak ada finally dan tidak ada close() manual. Inilah praktik terbaik modern.

try (BufferedReader br =
        new BufferedReader(new InputStreamReader(System.in))) {
    String line = br.readLine();
    System.out.println(line);
}

Cara Kerjanya

Setiap sumber daya yang dideklarasikan di dalam tanda kurung try (...) harus mengimplementasikan AutoCloseable. BufferedReader memenuhinya, sehingga Java memanggil close() untuk Anda.

Penutupan terjadi setelah blok selesai, baik blok tersebut berakhir secara normal maupun karena pengecualian.

Contoh Lengkap

Berikut program lengkap yang menggunakan try dengan sumber daya untuk membaca satu baris. Pembaca ditutup secara otomatis di akhir blok.

Program ini membaca dari System.in, sehingga menunggu masukan dan tidak dapat dijalankan otomatis di sini.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(System.in))) {
            String name = br.readLine();
            System.out.println("Hi " + name);
        }
    }
}

Dapat Dijalankan dengan StringReader

Untuk membuktikan bahwa try dengan sumber daya dapat bekerja tanpa masukan dari papan ketik, di sini program membaca dari StringReader. Program ini sepenuhnya dapat dijalankan.

Setelah blok selesai, pembaca ditutup secara otomatis — Anda tidak menulis pemanggilan close() apa pun.

import java.io.BufferedReader;
import java.io.StringReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException {
        try (BufferedReader br =
                new BufferedReader(new StringReader("done"))) {
            System.out.println(br.readLine());
        }
    }
}

Beberapa Sumber Daya

Anda dapat mendeklarasikan beberapa sumber daya dalam satu try, dipisahkan dengan titik koma. Java menutup semuanya dalam urutan terbalik dari urutan deklarasi.

Hal ini berguna ketika Anda membungkus beberapa aliran secara bersamaan.

try (InputStreamReader isr =
        new InputStreamReader(System.in);
     BufferedReader br = new BufferedReader(isr)) {
    System.out.println(br.readLine());
}

Menangkap IOException

Pembacaan dapat menimbulkan IOException. Anda dapat menambahkan catch ke blok try dengan sumber daya untuk menanganinya, alih-alih mendeklarasikan throws.

Sumber daya tetap ditutup secara otomatis sebelum catch dijalankan.

try (BufferedReader br = new BufferedReader(
        new InputStreamReader(System.in))) {
    System.out.println(br.readLine());
} catch (IOException e) {
    System.out.println("Read failed");
}

Haruskah Anda Menutup System.in?

Satu hal yang perlu diperhatikan: menutup pembaca pada System.in juga menutup System.in itu sendiri, dan Anda tidak dapat membukanya kembali.

Untuk program singkat, hal ini tidak masalah. Namun, jika Anda masih memerlukan masukan konsol nantinya, jangan menutup pembaca tersebut. Pahami apa yang dibungkus oleh aliran Anda.

Praktik Terbaik

Untuk menangani aliran dengan aman:

  • Utamakan try dengan sumber daya daripada close() manual.
  • Cara ini menutup aliran secara otomatis bahkan ketika terjadi galat.
  • Ingat bahwa menutup pembaca System.in juga menutup masukan standar.

Penanganan sumber daya yang rapi mencegah kebocoran dan bug.

Pemeriksaan Singkat

Pikirkan manfaat utama try dengan sumber daya.

Ringkasan

Anda telah mempelajari alasan aliran harus ditutup, pendekatan manual/finally yang berisiko, serta pola try dengan sumber daya yang bersih dan menutup sumber daya AutoCloseable secara otomatis.

Sekarang Anda dapat membaca masukan dengan BufferedReader secara aman dari awal hingga selesai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Menutup Aliran dengan Aman” gratis?

Ya — teks lengkap “Menutup Aliran dengan Aman” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Menutup Aliran dengan Aman”?

try-with-resources Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Menutup Aliran dengan Aman” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Mengapa BufferedReader
  2. Membaca Baris
  3. Mengurai Angka dari Masukan
  4. Menutup Aliran dengan Aman
← Kembali ke Java Academy