Jadual Kandungan
Effectively Final
final的好处
final关键字的使用
总结
Rumah Java javaTutorial final全方位深度剖析

final全方位深度剖析

Jul 19, 2017 pm 01:14 PM
final kira-kira


Java有一个关键字final,一个变量可以被声明为final类型,一个final类型的变量只能被赋值一次。如果一个final变量被重复赋值将会出现编译错误。


final关键字的含义?

final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。

什么是final变量?

凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量。final变量经常和static关键字一起使用,作为常量。下面是final变量的例子:

public static final String LOAN = "loan";

LOAN = new String("loan") //invalid compilation error

   

final变量是只读的。

什么是final方法?

final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。下面是final方法的例子:

class PersonalLoan{
    public final String getName(){
        return "personal loan";
    }
}
 
class CheapPersonalLoan extends PersonalLoan{
    @Override
    public final String getName(){
        return "cheap personal loan"; //compilation error: overridden method is final
    }
}
Salin selepas log masuk

什么是final类?

使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。下面是final类的实例:

final class PersonalLoan{
 
    }
 
    class CheapPersonalLoan extends PersonalLoan{  //compilation error: cannot inherit from final class
 
}
Salin selepas log masuk

final关键字的好处

下面总结了一些使用final关键字的好处

final关键字提高了性能。JVM和Java应用都会缓存final变量。

final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。

使用final关键字,JVM会对方法、变量及类进行优化。

Effectively Final

一个变量当且仅当在如下的情况才会被认为是effectively

1.未被声明为final

2.只赋了一次值

最简单的方式去解释effectively final就是想象它加上了final修饰,如果这样修改后,程序仍然运行无误(在编译通过的情况下^0^),并且跟原来的运行结果一致,那么这个变量可以说是effectively final。

final的好处

将局部变量限制为有效的不可变变量旨在让开发人员的更好的处理并发及线程安全的开发。 如果管理不当,可变字段始终是并发问题的潜在来源。

final关键字的使用

我觉得将变量,方法参数等声明为final是很好的习惯。它可以很好的提醒团队里的其它人,不要轻意的去修改它,抛开这个不提,声明为final,编译器在编译成class文件时,会对此进行很好的优化。

有很多的论据反对”在源文件中使用final关键字可以实现类文件的优化是不正确的“,强烈建议去读一下Robert Simons Jr的《Hardcore Java》关于final关键字的使用及优化的详情内容。

在一个应用中final关键字让你的代码的意图看起来会很明显,声明以后就不会被更改,这样很安全。

public class FinalTest {

    public static final int N_ITERATIONS = 10_00_000;

    public static String testFinal() {
        final String a = "a";
        final String b = "b";
        return a + b;
    }

    public static String testNonFinal() {
        String a = "a";
        String b = "b";
        return a + b;
    }

    public static void main(String[] args) {
        long tStart, tElapsed;

        tStart = System.currentTimeMillis();
        for (int i = 0; i < N_ITERATIONS; i++)
            testFinal();
        tElapsed = System.currentTimeMillis() - tStart;
        System.out.println("Method with finals took " + tElapsed + " ms");

        tStart = System.currentTimeMillis();
        for (int i = 0; i < N_ITERATIONS; i++)
            testNonFinal();
        tElapsed = System.currentTimeMillis() - tStart;
        System.out.println("Method without finals took " + tElapsed + " ms");

    }

}
Salin selepas log masuk

  运行结果:

Method with finals took 5 ms
Method without finals took 273 ms
Salin selepas log masuk

总结

final可以使你声明的变量更安全,让你的代码看起来更清晰,Effective Java中也是提倡使用immutable class滴。


 

Atas ialah kandungan terperinci final全方位深度剖析. 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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat 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)

Perbezaan antara final, finally, dan finalize di Jawa Perbezaan antara final, finally, dan finalize di Jawa Feb 19, 2024 pm 12:16 PM

Perbezaan antara muktamad, akhirnya, dan memuktamadkan dalam Java memerlukan contoh kod khusus Dalam pengaturcaraan Java, anda sering menemui tiga kata kunci muktamad, akhirnya, dan memuktamadkan Walaupun ia dieja sama, ia mempunyai makna dan penggunaan yang berbeza. Artikel ini akan menerangkan perbezaan antara ketiga-tiga kata kunci ini secara terperinci dan memberikan contoh kod untuk membantu pembaca memahami dengan lebih baik. 1. Kata kunci akhir Kata kunci akhir boleh digunakan untuk kelas, kaedah dan pembolehubah. Fungsinya adalah untuk membuat kelas yang diubah suai

Di Jawa, adakah mungkin untuk menentukan pemalar hanya menggunakan kata kunci akhir? Di Jawa, adakah mungkin untuk menentukan pemalar hanya menggunakan kata kunci akhir? Sep 20, 2023 pm 04:17 PM

Pembolehubah malar ialah pembolehubah yang nilainya tetap dan hanya satu salinan wujud dalam atur cara. Sebaik sahaja anda mengisytiharkan pembolehubah malar dan memberikan nilai kepadanya, anda tidak boleh menukar nilainya semula sepanjang program. Tidak seperti bahasa lain, Java tidak menyokong pemalar secara langsung. Walau bagaimanapun, anda masih boleh mencipta pemalar dengan mengisytiharkan pembolehubah statik dan muktamad. Statik - Sebaik sahaja anda mengisytiharkan pembolehubah statik, ia akan dimuatkan ke dalam memori pada masa penyusunan, iaitu hanya satu salinan akan tersedia. Akhir - Sebaik sahaja anda mengisytiharkan pembolehubah akhir, nilainya tidak boleh diubah suai. Oleh itu, anda boleh mencipta pemalar dalam Java dengan mengisytiharkan pembolehubah contoh sebagai statik dan muktamad. Contoh Demonstrasi classData{&am

Apakah fungsi kata kunci akhir java Apakah fungsi kata kunci akhir java Nov 25, 2022 pm 04:26 PM

Di Java, final boleh digunakan untuk mengubah suai kelas, kaedah dan pembolehubah. Kelas diubah suai akhir bermakna kelas itu tidak boleh diwarisi oleh mana-mana kelas lain, yang bermaksud bahawa kelas ini ialah kelas daun dalam pokok warisan, dan reka bentuk kelas ini telah dianggap sempurna dan tidak perlu diubah suai atau dilanjutkan. Kaedah dalam kelas diubah suai akhir bermakna kelas itu tidak boleh diwarisi oleh mana-mana kelas lain dan tidak boleh ditindih iaitu kaedah dikunci untuk menghalang kelas yang diwarisi daripada mengubahnya. final mengubah suai pembolehubah dalam kelas, menunjukkan bahawa pembolehubah tidak boleh diubah setelah ia dimulakan.

Bagaimanakah objek akhir dibuat di Jawa? Bagaimanakah objek akhir dibuat di Jawa? Apr 11, 2024 pm 02:00 PM

Terdapat dua cara untuk mencipta objek akhir dalam Java: mengisytiharkan pembolehubah akhir atau mengisytiharkan kelas menggunakan pengubahsuai akhir. Apabila pembolehubah akhir diisytiharkan, objek dicipta melalui pemula apabila kelas akhir diisytiharkan, contoh kelas tidak boleh diubah. Yang penting, rujukan kepada objek akhir masih boleh berubah, tetapi objek yang mereka tunjuk tidak boleh berubah.

Antara muka ColorOS15 terdedah Mengenai mesin ini, inilah perubahan besar Antara muka ColorOS15 terdedah Mengenai mesin ini, inilah perubahan besar Aug 28, 2024 pm 03:31 PM

Baru-baru ini, ColorOS15 mendahului dalam melancarkan ujian beta dalaman Beberapa netizen mendedahkan antara muka yang berkaitan Seperti yang anda lihat dalam gambar di atas, beberapa netizen menyiarkan antara muka "Mengenai Mesin Ini" OPPO Find X7 selepas menaik taraf. ColorOS15Beta Sebagai tambahan kepada perubahan besar dalam corak teratas, Maklumat konfigurasi di bahagian bawah juga telah berubah daripada dua lajur sebelumnya kepada pengedaran menegak satu lajur. Dilampirkan antara muka "Mengenai Telefon/Telefon Mudah Alih Ini" dalam versi terkini telefon mudah alih daripada enam jenama: Huawei, Honor, Xiaomi, OPPO, vivo dan Meizu Anda boleh memberitahu saya reka letak yang lebih anda sukai mengenai ColorOS 15. berita sebelumnya berkata Selain menyokong gambar langsung LivePhoto pada skala yang luas, ia juga akan "menyokong AirDrop&

pembolehubah akhir dalam java pembolehubah akhir dalam java Sep 24, 2023 pm 08:49 PM

Pembolehubah akhir hanya boleh dimulakan secara eksplisit sekali. Pembolehubah rujukan yang diisytiharkan sebagai Akhir tidak boleh ditetapkan semula untuk merujuk kepada objek lain. Walau bagaimanapun, data dalam objek boleh diubah. Oleh itu, keadaan objek boleh berubah, tetapi rujukan tidak boleh. Untuk pembolehubah, pengubahsuai akhir biasanya digunakan dengan statik untuk menjadikan pemalar pembolehubah kelas. Contoh publicclassTest{ finalintvalue=10; //Contoh yang berikutmengisytiharkan pemalar: &a

Antara muka ColorOS15 terdedah Mengenai mesin ini, inilah perubahan besar Antara muka ColorOS15 terdedah Mengenai mesin ini, inilah perubahan besar Aug 28, 2024 pm 03:31 PM

Baru-baru ini, ColorOS15 mendahului dalam melancarkan ujian beta dalaman Beberapa netizen mendedahkan antara muka yang berkaitan Seperti yang anda lihat dalam gambar di atas, beberapa netizen menyiarkan antara muka "Mengenai Mesin Ini" OPPO Find X7 selepas menaik taraf. ColorOS15Beta Sebagai tambahan kepada perubahan besar dalam corak teratas, Maklumat konfigurasi di bahagian bawah juga telah berubah daripada dua lajur sebelumnya kepada pengedaran menegak satu lajur. Dilampirkan antara muka "Mengenai Telefon/Telefon Mudah Alih Ini" dalam versi terkini telefon mudah alih daripada enam jenama: Huawei, Honor, Xiaomi, OPPO, vivo dan Meizu Anda boleh memberitahu saya reka letak yang lebih anda sukai mengenai ColorOS 15. berita sebelumnya berkata Selain menyokong gambar langsung LivePhoto pada skala yang luas, ia juga akan "menyokong AirDrop&

Sintaks khas dalam PHP: Statik, Akhir, Abstrak dan kata kunci lain Sintaks khas dalam PHP: Statik, Akhir, Abstrak dan kata kunci lain May 11, 2023 pm 04:00 PM

PHP ialah bahasa skrip sebelah pelayan sumber terbuka yang popular digunakan secara meluas dalam pembangunan web. Bahasa PHP bukan sahaja mudah dipelajari dan digunakan, tetapi juga menyokong pelbagai paradigma pengaturcaraan, pengaturcaraan berorientasikan objek, pengaturcaraan berfungsi, dll. Dalam PHP, terdapat beberapa kata kunci sintaks khas, seperti Statik, Akhir, Abstrak, dll. Kata kunci ini mempunyai fungsi khas dalam pengaturcaraan berorientasikan objek. Artikel ini akan memperkenalkan kata kunci ini secara terperinci. Kata kunci statik Dalam PHP, kata kunci Statik mempunyai dua kegunaan

See all articles