欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中final關(guān)鍵字詳解及用法詳解

 更新時間:2025年06月13日 08:30:45   作者:EMO的月亮與六便士  
談到final關(guān)鍵字,想必很多人都不陌生,在使用匿名內(nèi)部類的時候可能會經(jīng)常用到final關(guān)鍵字,這篇文章主要介紹了java中final關(guān)鍵字詳解及用法的相關(guān)資料,需要的朋友可以參考下

前言

在Java中,final關(guān)鍵字用于限制類、方法和變量的可變性,確保代碼的安全性和清晰度。以下是其詳細(xì)作用及使用場景:

1. final修飾類

  • 作用:被final修飾的類不能被繼承,即不能有子類。
  • 使用場景
    • 防止類被擴展或修改,例如String、Integer等不可變類。
    • 確保類的行為或安全性(如工具類)。
  • 示例
    final class ImmutableClass {
        // 類內(nèi)容
    }
    // 編譯錯誤:無法繼承final類
    // class SubClass extends ImmutableClass {}
    

2. final修飾方法

  • 作用:被final修飾的方法不能被子類重寫(Override)
  • 使用場景
    • 確保方法邏輯在繼承體系中保持不變,避免子類修改關(guān)鍵行為。
    • 與性能優(yōu)化相關(guān)(早期Java版本可能內(nèi)聯(lián)final方法)。
  • 示例
    class Parent {
        final void criticalMethod() {
            System.out.println("關(guān)鍵方法,不可重寫");
        }
    }
    
    class Child extends Parent {
        // 編譯錯誤:無法重寫final方法
        // @Override void criticalMethod() {}
    }
    

3. final修飾變量

final變量的值只能被賦值一次,之后不可修改。

3.1 成員變量(實例變量)

  • 必須初始化:可在聲明時、構(gòu)造方法或初始化塊中賦值。
  • 線程安全:正確初始化的final變量可安全發(fā)布到其他線程(JMM保證)。
  • 示例
    class MyClass {
        final int value;
        
        MyClass(int value) {
            this.value = value; // 必須在構(gòu)造方法中初始化
        }
    }
    

3.2 局部變量

  • 必須初始化:在聲明時或后續(xù)代碼中賦值一次。
  • 匿名內(nèi)部類訪問:在Java 8之前,匿名內(nèi)部類只能訪問final局部變量;Java 8+支持effectively final(實際不可變的變量)。
  • 示例
    void method() {
        final int localVar = 10;
        // localVar = 20; // 編譯錯誤
    }
    

3.3 靜態(tài)變量(類變量)

  • 必須初始化:在聲明時或靜態(tài)初始化塊中賦值。
  • 常量定義:通常結(jié)合static final定義全局常量。
  • 示例
    class Constants {
        static final double PI = 3.14159;
    }
    

3.4 引用類型變量

  • 引用不可變:變量指向的對象不能改變,但對象內(nèi)部狀態(tài)可能可變。
  • 示例
    final StringBuilder sb = new StringBuilder("Hello");
    sb.append(" World"); // 合法,修改對象內(nèi)容
    // sb = new StringBuilder(); // 編譯錯誤:引用不可變
    

4. final修飾參數(shù)

  • 作用:方法參數(shù)被final修飾后,方法內(nèi)不能修改其值。
  • 使用場景:防止參數(shù)被意外修改,提升代碼可讀性。
  • 示例
    void process(final int param) {
        // param = 5; // 編譯錯誤
    }
    

5. final與性能

  • 內(nèi)聯(lián)優(yōu)化:早期Java版本可能對final方法或變量進行內(nèi)聯(lián)優(yōu)化,但現(xiàn)代JVM通常自動處理。
  • 代碼清晰性final更多用于明確設(shè)計意圖,而非強制優(yōu)化。

6. 注意事項

  • 不可變對象 ≠ final變量final確保引用不變,但對象內(nèi)容可能可變(如final List仍可增刪元素)。
  • final類中的方法:隱式為final,無需顯式聲明。
  • 權(quán)衡使用:過度使用final可能導(dǎo)致代碼僵化,需根據(jù)設(shè)計需求合理選擇。

總結(jié)

final關(guān)鍵字通過限制類、方法和變量的可變性,增強代碼的健壯性和可維護性。合理使用可明確設(shè)計意圖,防止意外修改,適用于常量定義、不可變類設(shè)計、線程安全等場景。理解其在不同上下文中的作用,能更高效地編寫可靠代碼。

到此這篇關(guān)于java中final關(guān)鍵字詳解及用法的文章就介紹到這了,更多相關(guān)java final關(guān)鍵字用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java8中Stream的使用方式

    Java8中Stream的使用方式

    這篇文章主要介紹了Java8中Stream的使用方式,文章通過Stream的創(chuàng)建展開詳細(xì)的介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-04-04
  • MyBatis-Plus?分頁查詢的實現(xiàn)示例

    MyBatis-Plus?分頁查詢的實現(xiàn)示例

    本文主要介紹了MyBatis-Plus?分頁查詢的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • add方法理解ArrayList的擴容機制

    add方法理解ArrayList的擴容機制

    這篇文章主要為大家介紹了add方法理解ArrayList的擴容機制示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Java設(shè)計模式之代理模式原理及實現(xiàn)代碼分享

    Java設(shè)計模式之代理模式原理及實現(xiàn)代碼分享

    這篇文章主要介紹了Java設(shè)計模式之代理模式原理及實現(xiàn)代碼分享,設(shè)計代理模式的定義,靜態(tài)代理,動態(tài)代理,jdk動態(tài)代理實現(xiàn)步驟,原理及源碼等相關(guān)內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java程序中實現(xiàn)調(diào)用Python腳本的方法詳解

    Java程序中實現(xiàn)調(diào)用Python腳本的方法詳解

    這篇文章主要介紹了Java程序中實現(xiàn)調(diào)用Python腳本的方法,結(jié)合實例形式分析了eclipse環(huán)境中使用Java調(diào)用Python腳本的相關(guān)操作技巧與注意事項,需要的朋友可以參考下
    2018-03-03
  • JAVA注解相關(guān)知識總結(jié)

    JAVA注解相關(guān)知識總結(jié)

    這篇文章主要介紹了JAVA注解相關(guān)知識,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • java在cmd中亂碼的問題解決

    java在cmd中亂碼的問題解決

    本文深入探討了在使用Java命令行cmd時可能出現(xiàn)的中文亂碼問題,并提供了兩種解決方案,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • 如何用java做一個word轉(zhuǎn)圖片的功能詳解

    如何用java做一個word轉(zhuǎn)圖片的功能詳解

    這篇文章主要給大家介紹了關(guān)于如何用java做一個word轉(zhuǎn)圖片的功能,通過實現(xiàn)Java Word轉(zhuǎn)圖片功能,避免PDF中間轉(zhuǎn)換損耗,涵蓋分頁處理、字體設(shè)置、性能優(yōu)化及替代方案對比,需要的朋友可以參考下
    2025-05-05
  • Ubuntu16.04 64位下JDK1.7的安裝教程

    Ubuntu16.04 64位下JDK1.7的安裝教程

    這篇文章主要為大家詳細(xì)介紹了Ubuntu16.04 64位下JDK1.7的安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • 淺談spring ioc的注入方式及注入不同的數(shù)據(jù)類型

    淺談spring ioc的注入方式及注入不同的數(shù)據(jù)類型

    這篇文章主要介紹了淺談spring ioc的注入方式及注入不同的數(shù)據(jù)類型,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12

最新評論