Kesan Blok Akhirnya terhadap Nilai Pulangan
Di Jawa, tingkah laku blok akhirnya pada nilai pulangan kaedah boleh berlawanan dengan intuitif . Mari kita menganalisis coretan kod dan menyelidiki sebab asas fenomena ini.
Pertimbangkan kod 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()); } }
Apabila dilaksanakan, kod mencetak "Entry in finally Block" tetapi mengembalikan " dev." Ini kerana nilai pulangan ditentukan oleh pelaksanaan pernyataan pulangan dalam blok cuba. Perubahan yang dibuat kepada 's' dalam blok akhirnya berlaku selepas blok cuba selesai dan oleh itu tidak ditunjukkan dalam nilai pulangan.
Adalah penting untuk ambil perhatian bahawa ini terpakai kepada perubahan dalam nilai 's' itu sendiri, bukan kepada perubahan dalam rujukan objek. Jika 's' merujuk kepada objek boleh ubah dan kandungannya ditukar dalam blok akhirnya, perubahan tersebut akan kelihatan dalam nilai pulangan.
Spesifikasi Bahasa Java (JLS) menggariskan peraturan terperinci untuk ini tingkah laku dalam Seksyen 14.20.2. Dalam kes pernyataan cuba-akhir, jika kedua-dua blok cuba dan blok akhirnya mempunyai pernyataan pulangan, nilai pulangan blok akhirnya akan diguna pakai. Ini kerana pelaksanaan penyata pulangan dianggap sebagai penamatan blok secara tiba-tiba.
Untuk meringkaskan, nilai pulangan kaedah ditentukan oleh penyataan pulangan dalam blok cuba. Perubahan yang dibuat kepada pembolehubah dalam blok akhirnya, sama ada dalam nilai atau melalui pengubahsuaian objek, tidak menjejaskan nilai pulangan melainkan blok akhirnya juga termasuk pernyataan pulangan.
Atas ialah kandungan terperinci Bagaimanakah Sekatan Akhirnya Mempengaruhi Nilai Pulangan Kaedah di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!