Kesan Sekatan Akhirnya pada Pembolehubah Dikembalikan: Memahami Pengecualian
Di Java, blok akhirnya memastikan pelaksanaan kod tanpa mengira blok cuba-tangkap hasil atau penamatan mendadak. Walau bagaimanapun, adalah penting untuk memahami cara blok ini berinteraksi dengan pembolehubah yang dikembalikan.
Pertimbangkan kelas berikut:
public class Test { private String s; public String foo() { try { s = "dev"; return s; } finally { s = "override variable s"; // This change doesn't affect the returned value System.out.println("Entry in finally Block"); } } public static void main(String[] xyz) { Test obj = new Test(); System.out.println(obj.foo()); // Prints "dev" } }
Menyahkod Gelagat Tidak Dijangka
Apabila kaedah foo() digunakan, nilai yang dikembalikan ditentukan sebelum blok akhirnya dilaksanakan. Blok cuba dilengkapkan dengan pernyataan pulangan yang memberikan "dev" kepada s, yang menjadi nilai yang dikembalikan. Perubahan seterusnya kepada s dalam blok akhirnya tidak ditunjukkan dalam nilai yang dikembalikan.
Memahami Peraturan
Mengikut Spesifikasi Bahasa Java, melengkapkan blok cuba dengan penyata pulangan secara tiba-tiba menamatkannya. Blok akhirnya berjalan selepas penamatan mendadak, dan jika ia selesai seperti biasa, pernyataan cuba juga ditamatkan secara tiba-tiba. Oleh itu, pernyataan pulangan dalam blok akhirnya mengatasi nilai pulangan yang ditentukan dalam blok cuba.
Objek Boleh Ubah lwn. Objek Tidak Boleh Ubah
Perhatikan bahawa tingkah laku ini terpakai pada nilai sebenar s, bukan objek yang dirujuknya. Jika s adalah rujukan kepada objek boleh ubah (seperti tatasusunan atau kelas tersuai) dan kandungannya telah ditukar dalam blok akhirnya, perubahan tersebut akan menjejaskan nilai yang dikembalikan. Walau bagaimanapun, objek String tidak boleh diubah, jadi nilainya tidak boleh diubah.
Kesimpulan
Untuk meringkaskan, blok akhirnya tidak boleh mengubah suai pembolehubah yang dikembalikan dalam blok cuba. Nilai yang dikembalikan ditentukan sebelum blok akhirnya dilaksanakan dan sebarang perubahan seterusnya kepada nilai pembolehubah dalam blok akhirnya tidak akan menjejaskan hasil yang dikembalikan.
Atas ialah kandungan terperinci Adakah Blok Akhirnya Mengatasi Pembolehubah Dikembalikan di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!