Video: Android 101 by Fred Widjaja 2024
Bayangkan program Java yang mendapat input dari dua file yang berbeda atau dari
Pengimbas
dan cakera fail. Untuk memastikan bahawa anda membersihkan dengan betul, anda meletakkan
tutup
kaedah panggilan dalam klausa
akhirnya
.
java import. io. Fail;
java import. io. IOException;
java import. util. Pengimbas;
kelas awam Utama {
public static void main (String args []) {
Scanner scan1 = null;
Scanner scan2 = null;
cuba {
scan1 = Pengimbas baru (Fail baru ("File1. Txt"));
scan2 = Pengimbas baru (Fail baru ("File2. Txt"));
// Do stuff stuff
} catch (IOException e) {
// Oops!
} akhirnya {
scan1. tutup ();
scan2. tutup (); Sistem
. keluar. cetak ("Selesai!");
}
}
}
Secara teori, komputer sentiasa melaksanakan
scan1. tutup ()
dan
scan2. tutup ()
tidak kira apa yang berlaku semasa pelaksanaan klausa
cuba
. Tetapi teori itu. Sebenarnya, pengaturcara lain (bukan anda tentu saja) boleh mengubah kod dengan menutup
scan1
di tengah klausa
cuba
:
cuba {
scan1 = Pengimbas baru (Fail baru ("File1. Txt"));
scan2 = Pengimbas baru (Fail baru ("File2. Txt"));
// Adakah barangan berguna tetapi juga …
scan1. tutup ();
scan1 = null;
} tangkapan (IOException e) {
// Oops!
} akhirnya {
scan1. tutup ();
scan2. tutup (); Sistem
. keluar. cetak ("Selesai!");
}
Sekarang anda mempunyai keadaan yang sebenar. Di dalam klausa
akhirnya
, nilai
scan1
adalah
null
. Panggilan untuk
scan1. tutup ()
gagal, jadi program itu melemparkan
NullPointerException
dan berhenti berjalan sebelum mencapai panggilan untuk
scan2. tutup ()
. Dalam keadaan yang paling teruk,
scan2
tidak ditutup dan program anda mempunyai
File2. txt
dikunci sehingga tiada program lain boleh menggunakan fail tersebut.
Apabila sebuah program menggunakan beberapa sumber (banyak fail, pangkalan data dan fail, atau apa sahaja) penyusunan pernyataan
cuba
menjadi agak rumit. Anda boleh membuat
cuba
pernyataan dalam klausa
tangkapan
dan semua jenis kombinasi gila. Tetapi Java mempunyai cara yang lebih baik untuk menyelesaikan masalah: Dalam Java 7 (dan versi Java yang lebih baru), anda dapat membuat pernyataan sumber daya try-with-resources. Kod ini menunjukkan kepada anda bagaimana.
java import. io. Fail;
java import. io. IOException;
java import. util. Pengimbas;
kelas awam NewMain {
public static void main (String args []) {
try (Scanner scan1 = Scanner baru (new File ("File1.txt "));
Scanner scan2 = Scanner baru (Fail baru (" File2.txt "))) {
// Do stuffs
}
System.out.println ("Selesai!");
}
}
Dalam kod ini, pengisytiharan
scan1
dan
pengekalan tertulis memberitahu Jawa untuk menutup
scan1
dan
scan2
secara automatik selepas pelaksanaan pernyataan > cuba
klausa.Anda boleh mengisytiharkan beberapa sumber dalam satu kurungan pernyataan
cuba
, apabila anda melakukannya, Java menutup semua sumber secara automatik setelah pelaksanaan pernyataan klausa
cuba
. Anda boleh mengakses semua jenis sumber (fail, pangkalan data, sambungan ke pelayan, dan lain-lain) dan pastikan ketenangan
klausa dan klausa
akhirnya
Java akan memutuskan koneksi secara automatik.
Kehidupan yang baik.