Rumah > Java > javaTutorial > Mengapa Pengubahsuaian Pembolehubah dalam Blok Akhirnya Tidak Mempengaruhi Nilai yang Dipulangkan?

Mengapa Pengubahsuaian Pembolehubah dalam Blok Akhirnya Tidak Mempengaruhi Nilai yang Dipulangkan?

Barbara Streisand
Lepaskan: 2024-11-16 17:02:03
asal
878 orang telah melayarinya

Why Does Modifying a Variable in a Finally Block Not Affect the Returned Value?

Mengapa Tidak Mengubah Suai Pembolehubah dalam Blok Akhirnya Mempengaruhi Nilai yang Dipulangkan?

Java menyediakan pernyataan cuba-akhir, di mana kod dalam blok akhirnya sentiasa dilaksanakan, tidak kira sama ada blok cuba selesai secara normal atau mengejut. Walau bagaimanapun, tingkah laku ini boleh membawa kepada hasil yang tidak dijangka apabila pembolehubah diubah suai dalam blok akhirnya selepas pernyataan pulangan dilaksanakan dalam blok cuba.

Untuk menggambarkan konsep ini, pertimbangkan kelas Java berikut:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

public class Test {

 

    private String s;

 

    public String foo() {

        try {

            s = "dev";

            return s;  // Return the value of 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());

    }

}

Salin selepas log masuk

Dalam contoh ini, kaedah foo mengembalikan rentetan "dev" dalam blok cuba. Walau bagaimanapun, blok akhirnya mengubah suai pembolehubah s kepada "mengatasi pembolehubah s" dan mencetak mesej untuk menunjukkan bahawa ia telah dilaksanakan.

Anehnya, output kod ini ialah:

1

2

Entry in finally Block

dev

Salin selepas log masuk

Keputusan ini mungkin kelihatan berlawanan dengan intuisi kerana kami menjangkakan nilai s akan "mengatasi pembolehubah s" selepas blok akhirnya dilaksanakan. Walau bagaimanapun, ini tidak berlaku kerana:

  • Pernyataan pulangan dalam blok cuba melengkapkan pelaksanaan blok dan segera mengembalikan nilai s pada masa itu.
  • Mana-mana perubahan yang dibuat kepada pembolehubah s dalam blok akhirnya berlaku selepas penyataan pulangan telah dilaksanakan. Oleh itu, nilai s yang dikembalikan kekal "dev" walaupun blok akhirnya telah mengubah suainya.

Adalah penting untuk ambil perhatian bahawa tingkah laku ini hanya terpakai pada perubahan pada nilai pembolehubah s itu sendiri. Jika pembolehubah s adalah rujukan kepada objek boleh ubah, perubahan kepada kandungan objek yang dibuat dalam blok akhirnya akan ditunjukkan dalam nilai yang dikembalikan.

Penjelasan terperinci ini menjelaskan mengapa mengubah suai pembolehubah dalam blok akhirnya. tidak mengubah nilai pulangan kaedah, walaupun blok akhirnya sentiasa dilaksanakan.

Atas ialah kandungan terperinci Mengapa Pengubahsuaian Pembolehubah dalam Blok Akhirnya Tidak Mempengaruhi Nilai yang Dipulangkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan