1. Terlepas dari apakah ada pengecualian atau pengecualian, kode di blok terakhir akan dieksekusi; 2. Ketika ada pengembalian dalam try and catch, akhirnya akan tetap dieksekusi; 3. Akhirnya dijalankan setelah operasi ekspresi setelah pengembalian (pada saat ini, nilai setelah operasi tidak dikembalikan, tetapi nilai yang akan dikembalikan disimpan terlebih dahulu, terlepas dari kode yang terakhir, nilai yang dikembalikan tidak akan berubah, meskipun itu adalah nilai yang disimpan sebelumnya), sehingga nilai pengembalian fungsi ditentukan sebelum eksekusi akhir; 4. Yang terbaik adalah tidak menyertakan pengembalian akhirnya, jika tidak, program akan keluar lebih awal, dan nilai pengembalian bukanlah nilai pengembalian yang disimpan dalam try or catch. Contoh:
Situasi 1:try{} catch(){}finally{} return;
Rupanya prosedurnya dilakukan secara berurutan.
Situasi 2:try{ return; }catch(){} akhirnya{} kembali;
Program mengeksekusi kode sebelum dikembalikan di blok try (termasuk operasi ekspresi dalam pernyataan return);
kemudian eksekusi blok finally, dan terakhir eksekusi pengembalian di try;
akhirnya blokir pengembalian, karena program telah kembali di try, sehingga tidak lagi dieksekusi.
Situasi 3:try{ } catch(){return; } akhirnya{} kembali;
Program mengeksekusi try first, dan jika menemukan pengecualian, ia mengeksekusi blok catch,
Jika ada pengecualian, jalankan kode sebelum pengembalian (termasuk operasi ekspresi dalam pernyataan return) di catch, lalu jalankan semua kode dalam pernyataan akhir.
Terakhir, jalankan pengembalian di blok tangkapan. Setelah akhirnya, kode di 4 tempat tidak akan lagi dieksekusi.
Tidak terkecuali: Jalankan coba dan akhirnya kembali.
Situasi 4:try{ return; }catch(){} akhirnya{kembali; }
Program mengeksekusi kode sebelum dikembalikan di blok try (termasuk operasi ekspresi dalam pernyataan return);
Kemudian eksekusi blok terakhir, karena ada pengembalian di blok terakhir, jadi keluar lebih awal.
Kasus 5:try{} catch(){return; }akhirnya{kembali; }
Program mengeksekusi kode sebelum pengembalian (termasuk operasi ekspresi dalam pernyataan pengembalian) di blok tangkap;
Kemudian eksekusi blok terakhir, karena ada pengembalian di blok terakhir, jadi keluar lebih awal.
Situasi 6:try{ return; }catch(){kembali; } akhirnya{kembali; }
Program mengeksekusi kode sebelum dikembalikan di blok try (termasuk operasi ekspresi dalam pernyataan return);
Ada pengecualian: eksekusi kode sebelum pengembalian (termasuk operasi ekspresi dalam pernyataan return) di blok catch;
Kemudian jalankan blok finally, karena ada pengembalian di blok finally, sehingga keluar lebih awal.
Tidak terkecuali: kemudian eksekusi blok terakhir lagi, dan keluar lebih awal karena ada pengembalian di blok terakhir.
Kesimpulan akhir: Setiap pernyataan pengembalian dalam try or catch dieksekusi sebelum pernyataan akhir, jika akhirnya ada.
Jika ada pernyataan pengembalian di akhirnya, maka program akan kembali, jadi pengembalian yang akhirnya pasti akan dikembalikan.
Kompiler mengimplementasikan pengembalian akhirnya sebagai peringatan.
|