Rumah  >  Artikel  >  Java  >  Adakah Blok Akhirnya Mengatasi Pembolehubah Dikembalikan di Java?

Adakah Blok Akhirnya Mengatasi Pembolehubah Dikembalikan di Java?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-12 09:15:02338semak imbas

Does the Finally Block Override a Returned Variable in Java?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn