最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java final關(guān)鍵字用法、場景、面試題全解析

 更新時間:2026年04月15日 08:57:59   作者:海尋山  
本文全程圍繞final的核心用法展開,從“修飾變量、修飾方法、修飾類”三個核心場景,搭配實戰(zhàn)代碼、避坑細(xì)節(jié),再補充高頻面試題,幫你徹底吃透final,既適合新手入門,也適合鞏固基礎(chǔ)、備戰(zhàn)面試,感興趣的朋友一起看看吧

哈嘍,各位Java學(xué)習(xí)者!今天咱們拆解一個Java中高頻且核心的關(guān)鍵字——final。它看似簡單,僅表示“最終的、不可修改的”,但在實際開發(fā)和面試中都高頻出現(xiàn),稍不注意就會踩坑。

本文全程圍繞final的核心用法展開,從“修飾變量、修飾方法、修飾類”三個核心場景,搭配實戰(zhàn)代碼、避坑細(xì)節(jié),再補充高頻面試題,幫你徹底吃透final,既適合新手入門,也適合鞏固基礎(chǔ)、備戰(zhàn)面試,建議收藏備用~

核心提示:final的核心思想是“一旦定義,不可改變”,但不同修飾對象(變量、方法、類)的“不可改變”含義不同,這是新手最容易混淆的點,一定要重點區(qū)分。

一、final關(guān)鍵字核心定義

final是Java中的一個非訪問修飾符,中文意為“最終的、不可變的”,用于限制類、方法、變量的可修改性,核心作用有兩個:

  • 保證代碼的安全性:防止類被繼承、方法被重寫、變量被篡改,避免意外修改導(dǎo)致的bug;
  • 提高代碼的可讀性和可維護(hù)性:明確標(biāo)識“不可修改”的元素,讓開發(fā)者一眼知曉其作用域和限制。

final可修飾的三種對象,也是本文的核心重點:變量、方法、類,下面逐一詳解。

二、final修飾變量(最常用,重點掌握)

final修飾變量時,含義是“該變量為常量,一旦賦值,無法再修改”。這里的“無法修改”,需區(qū)分“基本數(shù)據(jù)類型”和“引用數(shù)據(jù)類型”,這是新手最容易踩坑的點。

2.1 修飾基本數(shù)據(jù)類型變量

修飾基本數(shù)據(jù)類型(int、char、double等)時,變量的值一旦賦值,就無法更改,直接編譯報錯。

public class FinalVariableDemo {
    public static void main(String[] args) {
        // 1. 局部變量(方法內(nèi)):聲明時直接賦值
        final int MAX_AGE = 120; // 常量命名規(guī)范:全大寫,單詞間用下劃線分隔
        // MAX_AGE = 130; // 編譯報錯:無法為最終變量分配值
        // 2. 成員變量(類內(nèi)、方法外):兩種賦值方式,二選一
        final String NAME = "Java學(xué)習(xí)者"; // 方式1:聲明時直接賦值
        final int SCORE; // 方式2:構(gòu)造器中賦值(必須賦值,否則編譯報錯)
        // 構(gòu)造器賦值
        SCORE = 95;
        // SCORE = 100; // 編譯報錯:已賦值,無法修改
    }
}

2.2 修飾引用數(shù)據(jù)類型變量

重點!修飾引用數(shù)據(jù)類型(對象、數(shù)組等)時,不可修改的是“引用地址”,而非對象內(nèi)部的屬性值。也就是說,引用變量不能指向新的對象,但可以修改對象內(nèi)部的成員變量。

public class FinalReferenceDemo {
    public static void main(String[] args) {
        // final修飾數(shù)組(引用類型)
        final int[] ARR = {1, 2, 3};
        ARR[0] = 100; // 允許:修改數(shù)組內(nèi)部元素的值
        // ARR = new int[]{4,5,6}; // 編譯報錯:無法修改引用地址
        // final修飾對象(引用類型)
        final Person person = new Person("張三", 20);
        person.setAge(21); // 允許:修改對象內(nèi)部屬性
        // person = new Person("李四", 22); // 編譯報錯:無法修改引用地址
    }
}
// 自定義Person類
class Person {
    private String name;
    private int age;
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // setter方法:修改對象內(nèi)部屬性
    public void setAge(int age) {
        this.age = age;
    }
}

2.3 常見使用場景(實戰(zhàn)必備)

  • 定義全局常量:搭配static使用,聲明項目中固定不變的值(如驗證碼字符池、配置參數(shù));
  • 方法參數(shù):防止方法內(nèi)部修改參數(shù)的值(尤其是引用類型參數(shù),避免意外篡改);
  • 局部變量:明確標(biāo)識該變量不會被修改,提高代碼可讀性(如循環(huán)次數(shù)、固定閾值)。

實戰(zhàn)示例(結(jié)合驗證碼功能):

// 全局常量:驗證碼字符池(固定不變,用final+static修飾)
public static final String CODE_POOL = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
// 全局常量:驗證碼固定長度(不可修改)
public static final int CODE_LENGTH = 4;

三、final修飾方法(面試高頻)

final修飾方法時,含義是“該方法不能被子類重寫”,但可以被子類繼承和調(diào)用。

核心使用場景:父類的方法邏輯已經(jīng)固定,不希望子類修改該方法的實現(xiàn)(比如工具類的核心方法、通用邏輯方法),避免子類重寫后破壞父類的設(shè)計意圖。

實戰(zhàn)示例

// 父類
class Parent {
    // final修飾方法,不能被子類重寫
    public final void showInfo() {
        System.out.println("父類的固定邏輯,不可修改");
    }
    // 普通方法,可被子類重寫
    public void commonMethod() {
        System.out.println("父類的普通方法");
    }
}
// 子類
class Son extends Parent {
    // 報錯:Cannot override the final method from Parent
    // @Override
    // public void showInfo() {}
    // 允許:重寫普通方法
    @Override
    public void commonMethod() {
        System.out.println("子類重寫父類的普通方法");
    }
}

避坑提醒

1. final方法不能被重寫,但可以被重載(重載和重寫不同,重載是方法名相同、參數(shù)列表不同);

2. private方法默認(rèn)是final的(子類無法訪問,自然無法重寫),無需顯式添加final修飾。

四、final修飾類(實戰(zhàn)常用)

final修飾類時,含義是“該類不能被繼承”,即該類沒有子類,是一個“最終類”。

核心使用場景:類的邏輯已經(jīng)完整,不需要被擴展,或者為了安全,防止子類繼承后篡改核心邏輯(比如Java中的String、Math、System類,都是final類)。

實戰(zhàn)示例

// final修飾類,不能被繼承
final class FinalClass {
    public void show() {
        System.out.println("final類的方法");
    }
}
// 報錯:Cannot inherit from final class FinalClass
// class SubClass extends FinalClass {}

重點補充

1. final類中的所有方法,默認(rèn)都是final方法(因為類不能被繼承,方法自然無法被重寫,無需顯式添加final);

2. final類可以繼承其他類,但不能被其他類繼承(比如String類繼承自O(shè)bject類,但不能被我們自定義的類繼承)。

五、final高頻面試題(新手必背)

final是面試中的高頻考點,以下3道題幾乎是必問,建議牢記答案,避免踩坑。

面試題1:final、finally、finalize的區(qū)別?(最常考)

  • final:修飾類、方法、變量,核心是“不可修改”,用于保證代碼安全和可讀性;
  • finally:異常處理的關(guān)鍵字,搭配try-catch使用,無論是否發(fā)生異常,finally塊中的代碼都會執(zhí)行(除非JVM退出),常用于釋放資源;
  • finalize:Object類中的方法,用于垃圾回收前的資源釋放(比如關(guān)閉文件、釋放連接),JVM會自動調(diào)用,開發(fā)者幾乎不用手動調(diào)用(已被JDK9廢棄)。

面試題2:final修飾引用類型變量,為什么能修改對象內(nèi)部的屬性?

final修飾引用變量,限制的是“引用地址”不可修改(即不能指向新的對象),但對象本身是獨立的,其內(nèi)部的屬性值不受final限制,可通過setter方法或直接賦值修改。

面試題3:String類為什么是final的?

核心原因有兩個:

  • 安全性:防止String類被繼承后篡改核心邏輯,避免字符串內(nèi)容被意外修改(比如黑客篡改密碼、接口參數(shù)等);
  • 效率:String類實現(xiàn)了常量池,final修飾保證字符串不可變,才能實現(xiàn)常量池復(fù)用,提高程序運行效率。

六、總結(jié)(新手必記)

final關(guān)鍵字的核心是“不可修改”,但不同修飾對象的含義不同,總結(jié)如下:

  • 修飾變量:基本類型→值不可改;引用類型→地址不可改,對象內(nèi)容可改;
  • 修飾方法:不可被子類重寫,可繼承、可重載;
  • 修飾類:不可被繼承,類中方法默認(rèn)是final;
  • 高頻搭配:static+final→全局常量,項目中大量使用;
  • 核心作用:保證代碼安全、提高可讀性和可維護(hù)性。

final是Java基礎(chǔ)中的重點,也是面試高頻考點,建議多寫代碼練習(xí),重點區(qū)分“引用類型變量”的修飾細(xì)節(jié),避免踩坑。

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

相關(guān)文章

  • Springboot?JPA級聯(lián)操作的實現(xiàn)(一對一、一對多、多對多)

    Springboot?JPA級聯(lián)操作的實現(xiàn)(一對一、一對多、多對多)

    本文深入解析JPA中的一對一、一對多和多對多級聯(lián)操作,包括實體間的關(guān)系建立、查詢、保存、刷新和刪除等操作,具有一定的參考價值,感興趣的可以了解一下
    2025-07-07
  • Java如何實現(xiàn)封裝和包

    Java如何實現(xiàn)封裝和包

    文章主要介紹了Java中的封裝、訪問修飾符、封裝的好處、封裝的步驟、包的概念、導(dǎo)入包、自定義包、常用的包、static關(guān)鍵字及其用法、代碼塊、對象的打印等內(nèi)容
    2026-01-01
  • JDBC 與 MyBatis從基礎(chǔ)到實踐

    JDBC 與 MyBatis從基礎(chǔ)到實踐

    JDBC(Java Database Connectivity)即 Java 數(shù)據(jù)庫連接,是 Java 語言中用來規(guī)范客戶端程序如何來訪問數(shù)據(jù)庫的應(yīng)用程序接口,提供了諸如查詢和更新數(shù)據(jù)庫中數(shù)據(jù)的方法,這篇文章主要介紹了JDBC 與 MyBatis從基礎(chǔ)到實踐,需要的朋友可以參考下
    2025-04-04
  • Java JAR 啟動內(nèi)存參數(shù)配置指南(從基礎(chǔ)設(shè)置到性能優(yōu)化)

    Java JAR 啟動內(nèi)存參數(shù)配置指南(從基礎(chǔ)設(shè)置到性能優(yōu)化)

    在啟動 Java 可執(zhí)行 JAR 文件時,合理配置 JVM 內(nèi)存參數(shù)是保障應(yīng)用穩(wěn)定性和性能的關(guān)鍵,本文將系統(tǒng)講解如何通過命令行參數(shù)、環(huán)境變量等方式指定內(nèi)存配置,并結(jié)合實際場景提供優(yōu)化建議,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • maven在settings.xml和pom.xml中指定jdk版本編譯的方法

    maven在settings.xml和pom.xml中指定jdk版本編譯的方法

    在開發(fā)Java應(yīng)用時,通常需要指定要使用的Java版本,下面這篇文章主要給大家介紹了關(guān)于maven在settings.xm和pom.xml中指定jdk版本編譯的方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • JVM要雙親委派的原因及如何打破它

    JVM要雙親委派的原因及如何打破它

    平時做業(yè)務(wù)開發(fā)比較少接觸類加載器,但是如果想深入學(xué)習(xí),了解類加載的原理是必不可少的.java的類加載器有哪些?什么是雙親委派?為什么要雙親委派?如何打破它?接下來本文就帶大家詳細(xì)介紹這些知識 ,需要的朋友可以參考下
    2021-06-06
  • java實現(xiàn)導(dǎo)出數(shù)據(jù)為zip壓縮文件

    java實現(xiàn)導(dǎo)出數(shù)據(jù)為zip壓縮文件

    這篇文章主要為大家詳細(xì)介紹了java如何實現(xiàn)導(dǎo)出數(shù)據(jù)為zip壓縮文件,并且解壓后為json文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-11-11
  • java并發(fā)編程之cas詳解

    java并發(fā)編程之cas詳解

    這篇文章主要介紹了java并發(fā)編程之cas詳解,涉及cas使用場景和cas用作原子操作等內(nèi)容,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java線程基本使用之如何實現(xiàn)Runnable接口

    Java線程基本使用之如何實現(xiàn)Runnable接口

    這篇文章主要介紹了Java線程基本使用之如何實現(xiàn)Runnable接口問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SpringBoot應(yīng)用優(yōu)雅停機的3種標(biāo)準(zhǔn)方案

    SpringBoot應(yīng)用優(yōu)雅停機的3種標(biāo)準(zhǔn)方案

    所謂優(yōu)雅停機(Graceful Shutdown),就是讓應(yīng)用在關(guān)閉前停止接收新請求;把正在處理的請求執(zhí)行完;釋放線程池、連接池、MQ 消費者等資源;最后再安全退出,今天講清楚 SpringBoot優(yōu)雅停機的3種標(biāo)準(zhǔn)方案,生產(chǎn)直接抄配置,需要的朋友可以參考下
    2026-03-03

最新評論

丽水市| 葵青区| 永靖县| 民和| 聂拉木县| 临澧县| 军事| 阿鲁科尔沁旗| 鹿邑县| 柏乡县| 托克托县| 汤阴县| 壤塘县| 南溪县| 泸溪县| 紫阳县| 金昌市| 宾阳县| 赤城县| 观塘区| 简阳市| 樟树市| 固镇县| 衡水市| 华蓥市| 连平县| 安阳市| 阿坝| 永顺县| 海淀区| 临湘市| 巴中市| 柳河县| 阳朔县| 乌兰县| 建阳市| 揭阳市| 峨边| 五寨县| 运城市| 平潭县|