Rumah Java javaTutorial Apakah kesilapan biasa dengan kelas dalaman tanpa nama di Jawa?

Apakah kesilapan biasa dengan kelas dalaman tanpa nama di Jawa?

May 02, 2024 am 09:03 AM
java acara klik kelas dalaman tanpa nama

Ralat penggunaan kelas dalaman tanpa nama: Mengakses pembolehubah di luar skop menggunakan menangkap pengecualian yang tidak diisytiharkan dalam persekitaran yang tidak selamat untuk benang

Java 匿名内部类有哪些常见错误?

Kelas dalaman Java Anonymous: Ralat biasa

kelas Java inner ialah Anonymous class, Ia tidak mempunyai nama dan ditakrifkan secara langsung dalam blok kod yang menciptanya. Ia digunakan secara meluas di Java, terutamanya dalam pengendalian acara dan fungsi panggil balik. Walaupun kelas dalaman tanpa nama adalah mudah, terdapat beberapa kesilapan biasa yang perlu dielakkan. . Jika anda menggunakan kelas dalaman tanpa nama dalam persekitaran berbilang benang, ini boleh membawa kepada perlumbaan data dan tingkah laku yang tidak dapat diramalkan.

// 非线程安全的示例:

public class NonThreadSafe {
    private int count;

    public void increment() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                count++; // 可能导致数据竞争
            }
        };
        new Thread(runnable).start();
    }
}
Salin selepas log masuk

2. Menangkap pengecualian yang tidak diisytiharkan

Kelas dalaman tanpa nama boleh menangkap pengecualian yang dilemparkan dalam blok percubaan luar. Walau bagaimanapun, berbuat demikian boleh mengaburkan maklumat kritikal atau menyebabkan tingkah laku yang tidak dijangka. Amalan terbaik adalah dengan hanya menangkap pengecualian yang diisytiharkan secara eksplisit dalam blok percubaan kelas dalam.

// 捕获未声明的异常的示例:

public class UncaughtException {
    public void doSomething() {
        try {
            Runnable runnable = new Runnable() {
                @Override
                public void run() {
                    throw new RuntimeException(); // 异常未捕获
                }
            };
            new Thread(runnable).start();
        } catch (Exception e) {
            // 此处无法捕获 RuntimeException
        }
    }
}
Salin selepas log masuk

3. Mengakses pembolehubah luar sempadan

Kelas dalaman tanpa nama boleh merujuk pembolehubah tempatan dalam kelas yang disertakan. Walau bagaimanapun, pembolehubah ini mesti kekal aktif sepanjang hayat kelas dalaman tanpa nama. Jika pembolehubah tempatan ditimpa atau keluar daripada skop semasa pelaksanaan kelas dalaman tanpa nama, NullPointerException atau pengecualian lain mungkin terhasil.

// 访问越界变量的示例:

public class VariableOutOfScope {
    public void doSomething() {
        int count = 10;
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                // count 可能被覆盖
                System.out.println(count); // 可能导致 NullPointerException
            }
        };
        count = 20;
        new Thread(runnable).start();
    }
}
Salin selepas log masuk

Kes praktikal:

Gunakan kelas dalaman tanpa nama untuk mengendalikan acara klik butang:

public class ButtonHandler {

    public void handleButtonClick() {
        Button button = new Button();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 处理按钮点击事件
            }
        });
    }
}
Salin selepas log masuk
Gunakan kelas dalaman tanpa nama untuk mencipta benang:

rree

Atas ialah kandungan terperinci Apakah kesilapan biasa dengan kelas dalaman tanpa nama di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Tag artikel panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Akar Kuasa Dua di Jawa Akar Kuasa Dua di Jawa Aug 30, 2024 pm 04:26 PM

Akar Kuasa Dua di Jawa

Nombor Sempurna di Jawa Nombor Sempurna di Jawa Aug 30, 2024 pm 04:28 PM

Nombor Sempurna di Jawa

Penjana Nombor Rawak di Jawa Penjana Nombor Rawak di Jawa Aug 30, 2024 pm 04:27 PM

Penjana Nombor Rawak di Jawa

Nombor Armstrong di Jawa Nombor Armstrong di Jawa Aug 30, 2024 pm 04:26 PM

Nombor Armstrong di Jawa

Weka di Jawa Weka di Jawa Aug 30, 2024 pm 04:28 PM

Weka di Jawa

Nombor Smith di Jawa Nombor Smith di Jawa Aug 30, 2024 pm 04:28 PM

Nombor Smith di Jawa

Soalan Temuduga Java Spring Soalan Temuduga Java Spring Aug 30, 2024 pm 04:29 PM

Soalan Temuduga Java Spring

Cuti atau kembali dari Java 8 Stream Foreach? Cuti atau kembali dari Java 8 Stream Foreach? Feb 07, 2025 pm 12:09 PM

Cuti atau kembali dari Java 8 Stream Foreach?

See all articles