Dalam kode ini akan someVar
ditetapkan bahkan jika blok tangkapan dieksekusi dan Pengecualian kedua dilemparkan?
public void someFunction() throws Exception {
try {
//CODE HERE
} catch (Exception e) {
Log.e(TAG, "", e);
throw new Exception(e);
} finally {
this.someVar= true;
}
}
Jawaban:
Ya, blok terakhir selalu berjalan ... kecuali ketika:
System.exit(0);
Selain itu, jika suatu metode di blok Anda akhirnya melempar pengecualian yang tidak tertangkap, maka tidak ada setelah itu akan dieksekusi (yaitu pengecualian akan dilemparkan seperti halnya dalam kode lainnya). Kasus yang sangat umum dimana ini terjadi adalah
java.sql.Connection.close()
.Sebagai tambahan, saya menduga bahwa contoh kode yang Anda gunakan hanyalah sebuah contoh, tetapi hati-hati menempatkan logika aktual di dalam blok akhirnya. Blok akhirnya ditujukan untuk pembersihan sumber daya (menutup koneksi DB, melepaskan pegangan file dll), bukan untuk logika yang harus dijalankan. Jika harus dijalankan, lakukan sebelum blok coba-tangkap, jauh dari sesuatu yang bisa menimbulkan pengecualian, karena niat Anda hampir pasti sama secara fungsional.
sumber
finally
ini kemudian ditentukan dalam hal penghentian normal dan tiba-tiba.Iya.
Lihat dokumentasi :
Pengecualian:
sumber
Akhirnya, blok selalu dijalankan.
}
sumber
Akhirnya selalu dieksekusi, tidak peduli apa kasus Anda yaitu
Untuk pengecualian yang tidak dicentang, java tidak mengamanatkan, penanganan kesalahan. inilah alasannya, jika pengecualian yang tidak dicentang terjadi pada akhirnya blok dan tidak ada penanganan yang dilakukan untuk itu, maka kode yang ditulis di bawah titik ini (di mana kesalahan telah terjadi) tidak akan dieksekusi.
Jadi saya sarankan untuk selalu menangani semua pengecualian, apakah itu dapat diperiksa atau tidak dicentang. Dengan cara ini Anda dapat memastikan bahwa blok kode pada akhirnya juga dieksekusi tidak masalah jika pengecualian tidak dicentang juga terjadi. Anda memiliki tempat di tangkapan sub-sarang dan Akhirnya memblokir untuk menyelesaikan pekerjaan Anda.
sumber
Blok akhirnya selalu dijalankan ketika blok coba keluar. Kecuali Anda sudah System.exit (0) dalam mencoba atau menangkap Anda.
sumber
Iya.
finally
blok selalu dijalankan kecuali jika Anda memanggil System.exit () karena menghentikan Java VM.sumber