Menutup Strim dengan Selamat
try-with-resources.
Menutup Strim dengan Selamat ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Mengapa Aliran Perlu Ditutup
Aliran seperti BufferedReader memegang sumber sistem — pemegang fail, penimbal memori dan sambungan. Jika anda tidak pernah menutupnya, sumber tersebut boleh bocor.
Menutup aliran membebaskan perkara yang dipegangnya dan mengosongkan sebarang data yang masih menunggu. Pelajaran ini menunjukkan cara melakukannya dengan selamat.
Kaedah close
Setiap pembaca mempunyai kaedah close(). Memanggilnya akan melepaskan sumber tersebut.
Bagi BufferedReader yang membungkus System.in, penutupan juga menutup aliran asas yang dibungkusnya.
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
// ... use br ...
br.close();Cara Lama yang Berisiko
Anda boleh memanggil close() secara manual, tetapi jika ralat berlaku sebelum baris itu dijalankan, close() akan dilangkau dan sumber tersebut bocor.
Meletakkan close() dalam blok finally membantu, tetapi cara ini panjang dan mudah dilakukan dengan salah.
BufferedReader br = null;
try {
br = new BufferedReader(
new InputStreamReader(System.in));
// ... use br ...
} finally {
if (br != null) br.close();
}try-dengan-sumber
Java mempunyai penyelesaian yang lebih kemas: try-dengan-sumber. Anda mengisytiharkan aliran dalam kurungan selepas try, dan Java akan menutupnya secara automatik apabila blok tersebut berakhir — walaupun ralat berlaku.
Tiada finally dan tiada close() manual. Inilah amalan terbaik moden.
try (BufferedReader br =
new BufferedReader(new InputStreamReader(System.in))) {
String line = br.readLine();
System.out.println(line);
}Cara Ia Berfungsi
Sebarang sumber yang diisytiharkan dalam kurungan try (...) mesti melaksanakan AutoCloseable. BufferedReader melaksanakannya, jadi Java memanggil close() untuk anda.
Penutupan berlaku selepas blok selesai, sama ada blok berakhir secara normal atau disebabkan oleh pengecualian.
Contoh Lengkap
Berikut ialah program lengkap yang menggunakan try-dengan-sumber untuk membaca satu baris. Pembaca tersebut ditutup secara automatik pada akhir blok.
Program ini membaca daripada System.in, jadi ia menunggu masukan dan tidak boleh dijalankan secara automatik 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);
}
}
}Boleh Dijalankan dengan StringReader
Untuk membuktikan bahawa try-dengan-sumber berfungsi tanpa masukan papan kekunci, contoh ini membaca daripada StringReader. Contoh ini boleh dijalankan sepenuhnya.
Selepas blok tersebut, pembaca ditutup secara automatik — anda tidak perlu menulis sebarang panggilan close().
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());
}
}
}Berbilang Sumber
Anda boleh mengisytiharkan beberapa sumber dalam satu try, dipisahkan dengan koma bertitik. Java menutup kesemuanya mengikut susunan terbalik daripada pengisytiharan.
Cara ini berguna apabila anda membungkus beberapa aliran bersama-sama.
try (InputStreamReader isr =
new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr)) {
System.out.println(br.readLine());
}Menangkap Pengecualian Input/Output
Pembacaan boleh melontarkan IOException. Anda boleh menambahkan catch pada blok try-dengan-sumber untuk mengendalikannya dan bukannya mengisytiharkan throws.
Sumber tersebut masih ditutup secara automatik 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");
}Perlukah Anda Menutup System.in?
Satu perkara yang perlu diberi perhatian: menutup pembaca pada System.in turut menutup System.in itu sendiri, dan anda tidak boleh membukanya semula.
Untuk program pendek, perkara ini tidak mengapa. Namun, jika anda masih memerlukan masukan konsol kemudian, jangan tutup pembaca tertentu itu. Ketahui perkara yang dibungkus oleh aliran anda.
Amalan Terbaik
Untuk mengendalikan aliran dengan selamat:
- Utamakan try-dengan-sumber berbanding
close()manual. - Ia ditutup secara automatik walaupun ralat berlaku.
- Ingat bahawa menutup pembaca
System.inakan menutup masukan piawai.
Pengendalian sumber yang kemas mencegah kebocoran dan pepijat.
Semakan Pantas
Fikirkan manfaat utama try-dengan-sumber.
Imbas Kembali
Anda telah mempelajari sebab aliran mesti ditutup, pendekatan manual/finally yang berisiko, serta corak try-dengan-sumber yang kemas untuk menutup sumber AutoCloseable secara automatik.
Kini anda boleh membaca masukan dengan BufferedReader secara selamat dari mula hingga selesai.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Menutup Strim dengan Selamat” percuma?
Ya — teks penuh “Menutup Strim dengan Selamat” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menutup Strim dengan Selamat”?
try-with-resources. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Menutup Strim dengan Selamat” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Mengapa BufferedReader
- Membaca Baris
- Menghuraikan Nombor daripada Input
- Menutup Strim dengan Selamat