Di Jawa, secara amnya difahami bahawa blok akhirnya tidak boleh menjejaskan nilai pulangan kaedah. Walau bagaimanapun, ia mungkin mengelirukan mengapa ini berlaku, terutamanya apabila nilai pulangan diubah suai dalam blok akhirnya.
Pertimbangkan contoh berikut:
public class Test { private String s; public String foo() { try { s = "dev"; return s; } finally { s = "override variable s"; System.out.println("Entry in finally Block"); } } public static void main(String[] xyz) { Test obj = new Test(); System.out.println(obj.foo()); } }
Output kod ini ialah :
Entry in finally Block dev
Mengapa s tidak ditindih dalam blok akhirnya, namun kawalan dicetak output?
Blok cubaan dilengkapkan dengan pelaksanaan pernyataan pulangan. Nilai s pada masa penyata pulangan dilaksanakan ialah nilai yang dikembalikan oleh kaedah. Hakikat bahawa klausa akhirnya kemudian mengubah nilai s (selepas pernyataan pulangan selesai) tidak (pada ketika itu) mengubah nilai pulangan.
Dalam contoh di atas, pernyataan pulangan dalam blok cuba ditetapkan nilai pulangan kepada "dev". Blok akhirnya kemudian menetapkan s kepada "mengatasi pembolehubah s", tetapi perubahan ini berlaku selepas nilai pulangan telah ditetapkan. Oleh itu, nilai pulangan masih "dev".
Adalah penting untuk ambil perhatian bahawa tingkah laku ini hanya digunakan pada perubahan dalam nilai pembolehubah primitif atau objek tidak berubah. Jika s adalah rujukan kepada objek boleh ubah dan kandungan objek telah ditukar dalam blok akhirnya, maka perubahan tersebut akan dilihat dalam nilai yang dikembalikan.
Atas ialah kandungan terperinci Mengapa Mengubah Suai Pembolehubah dalam Blok `akhirnya` Tidak Mempengaruhi Nilai Pulangan di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!