Alasan dan skenario untuk menggunakan mencoba dan akhirnya tidak menggunakan tangkapan
Dalam JDK Concurrency Toolkit, banyak penanganan pengecualian menggunakan struktur berikut, seperti AbstractExecutorService, yaitu, hanya ada mencoba dan akhirnya tidak ada tangkapan.
Kelas X {Private Final Reentrantlock Lock = baru reentrantlock (); buka kunci ()}}}Mengapa menggunakan struktur ini? Apa manfaatnya? Lihat kode berikut terlebih dahulu
public void testtryandfinally (name string) {coba {name.length (); // nullpointerException} akhirnya {System.out.println ("aa");Hasil eksekusi lewat nol metode ini adalah: cetak AA pada konsol dan lempar nullpointerexception. Proses eksekusi adalah terlebih dahulu menjalankan blok coba, menjalankan blok akhirnya terjadi setelah pengecualian terjadi, dan akhirnya melemparkan pengecualian dalam mencoba ke penelepon. Hasil eksekusi ini sangat normal, karena tidak ada penangkap pengecualian, semua metode hanya dapat melemparkan pengecualian yang dihasilkan ke luar;
Apa manfaat dari pendekatan ini? Untuk testryandfinal, ia melakukan apa yang harus dilakukan dan melemparkan pengecualian yang tidak dapat ditangani; Dengan kata lain, struktur ini mewujudkan pemisahan tanggung jawab, mewujudkan decoupling penanganan pengecualian dan pembersihan pengecualian, dan memungkinkan metode yang berbeda untuk fokus pada apa yang harus mereka lakukan. Jadi kapan harus menggunakan mencoba-akhir, dan kapan harus menggunakan cobalah-akhir? Jelas itu tergantung pada apakah metode itu sendiri dapat menangani pengecualian yang muncul dalam mencoba. Jika Anda dapat menanganinya sendiri, maka tangkap secara langsung tanpa melemparkannya ke penelepon metode; . Artinya, menyatakan pengecualian bahwa lemparan mungkin muncul dalam tanda tangan metode dan tidak dapat ditangani dengan sendirinya, tetapi lakukan apa yang harus Anda lakukan dalam metode ini.
Situasi di mana pernyataan akhirnya tidak akan dieksekusi
Satu -satunya situasi di mana pernyataan Java akhirnya tidak akan dieksekusi adalah bahwa metode System.exit () yang digunakan untuk mengakhiri program dieksekusi terlebih dahulu.
tes kelas publik {public static void main (string [] args) {try {system.out.println ("start"); } System.out.println ("end");Hasil outputnya adalah:
Awal
Tentu saja, jika kekuatan tiba -tiba terputus saat menjalankan pernyataan coba umum tanpa pernyataan System.exit (), semua proses akan berakhir dan pernyataan akhirnya tidak akan dieksekusi.