Kunci akhirnya di Java umumnya digunakan dengan mencoba contoh untuk diilustrasikan:
Public tryandfinallytest {public static void main (string [] args) melempar Exception {try {int a = testfinal (2); ) {int B = testfinal (1); b); ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ::::::::::::::::::::::::::: {case 1: ++ i; break; // Program ini berakhir dengan biasanya 2: Lempar pengecualian baru ("Pengecualian di bawah Tes"); "Akhirnya Datang Saat I ="+Bendera);
Hasil eksekusi adalah sebagai berikut
Akhirnya datang ketika i = 2 secara final datang ketika i = 1 hasilnya dikembalikan secara normal b: 2 secara final datang ketika i = 3break mengembalikan hasil: 3 secara final datang ketika i = 4Return Mengembalikan hasil: -1
Hasilnya menunjukkan bahwa apa pun situasi di atas, blok akhirnya akan selalu dieksekusi.
Dibandingkan dengan model bahasa lainnya, kata kunci akhirnya adalah tambahan terbaik untuk model penanganan pengecualian Java. Struktur akhirnya memungkinkan kode untuk selalu mengeksekusi terlepas dari apakah pengecualian terjadi. Gunakan akhirnya untuk mempertahankan keadaan internal suatu objek dan untuk membersihkan sumber daya non-memori. Tanpa akhirnya kode Anda akan membingungkan. Misalnya, kode berikut menggambarkan bagaimana Anda harus menulis kode untuk membebaskan sumber daya non-memori tanpa menggunakan akhirnya:
Impor Java.net.*; .accept ();
Kode ini membuat soket dan memanggil metode penerimaan. Sebelum keluar dari metode ini, Anda harus menutup soket ini untuk menghindari kerentanan sumber daya. Untuk menyelesaikan tugas ini, kami menelepon dekat pada // 2, yang merupakan pernyataan terakhir dari metode ini. Tetapi apa yang terjadi jika pengecualian terjadi di blok coba? Dalam hal ini, panggilan dekat di // 2 tidak pernah terjadi. Karena itu, Anda harus menangkap pengecualian ini dan memasukkan panggilan lain untuk menutup pada // 1 sebelum menerbitkan kembali pengecualian ini. Ini memastikan bahwa soket ditutup sebelum keluar dari metode ini.
Menulis kode seperti ini rumit dan rentan kesalahan, tetapi akhirnya penting tanpa akhirnya. Sayangnya, dalam bahasa tanpa mekanisme akhirnya, programmer mungkin lupa untuk mengatur kode mereka dengan cara ini, menghasilkan kerentanan sumber daya. Klausa akhirnya di Java memecahkan masalah ini. Dengan akhirnya, kode sebelumnya dapat ditulis ulang ke bentuk berikut:
Impor Java.net.*; .accept (); // kode lain di sini ...} akhirnya {ss.close ();
Blok akhirnya memastikan bahwa metode dekat selalu dieksekusi terlepas dari apakah pengecualian dikeluarkan dalam blok coba. Oleh karena itu, dipastikan bahwa metode dekat selalu dipanggil sebelum keluar dari metode. Dengan cara ini Anda dapat yakin bahwa soket ditutup dan Anda belum bocor sumber daya. Tidak perlu untuk blok tangkapan lain dalam metode ini. Blok tangkapan disediakan dalam contoh pertama hanya untuk menutup soket, sekarang ini ditutup pada akhirnya. Jika Anda memberikan blok tangkapan, kode di blok akhirnya dieksekusi setelah blok tangkapan selesai.
Blok akhirnya harus digunakan dengan blok coba coba atau coba/tangkap. Selain itu, tidak mungkin untuk keluar dari blok mencoba tanpa menjalankan blok akhirnya. Jika blok akhirnya ada, itu akan selalu dieksekusi. (Pernyataan ini benar dari sudut pandang itu. Ada cara untuk keluar dari blok coba tanpa menjalankan blok akhirnya. Jika kode mengeksekusi sistem.exit (0); pernyataan di dalam coba, aplikasi berakhir tanpa dieksekusi akhirnya eksekusi eksekusi akhirnya Di sisi lain, jika Anda mematikan daya selama eksekusi blok mencoba, akhirnya tidak akan melakukannya.