Java-final關鍵字詳解

Java-final關鍵字詳解

?一、引言

二、什么是 final 關鍵字?

三、final 變量

final 局部變量

final 實例變量

final 靜態變量

四、final 方法

五、final 類

六、final 關鍵字的實際應用

1. 定義常量

2. 防止方法被重寫

3. 創建不可變類

4. 優化性能

七、final 的一些常見誤區

1. final 變量不能在構造方法中賦值

2. final 類中的所有方法都是 final 的

3. final 變量的引用不能改變

結論


🎈邊走、邊悟🎈遲早會好

?一、引言

final 關鍵字在 Java 中是一種修飾符,可以用于變量、方法和類。它的主要作用是控制這些元素的可變性和繼承行為。本文將詳細介紹 final 關鍵字的各種用法及其實際應用,并澄清一些常見的誤區。

二、什么是 final 關鍵字?

final 關鍵字可以應用于變量、方法和類,以表示這些元素是不可改變的或是最終的。具體來說,final 變量一旦初始化后就不能再修改;final 方法不能被子類重寫;final 類不能被繼承。

三、final 變量

final 變量是指一旦被賦值后就不能再更改其值的變量。根據其作用范圍和生命周期,可以分為局部變量、實例變量和靜態變量。

final 局部變量

final 局部變量是在方法內部定義的,并且一旦賦值后便不能再改變。

public void exampleMethod() {final int localVar = 10;// localVar = 20; // This would cause a compilation error
}

final 實例變量

final 實例變量是在類的實例中定義的,并且必須在對象構造完成前賦值。可以在聲明時直接賦值,也可以在構造方法中賦值。

public class ExampleClass {final int instanceVar;public ExampleClass(int value) {instanceVar = value;}
}

final 靜態變量

final 靜態變量是類級別的常量,必須在聲明時或在靜態初始化塊中賦值,且一旦賦值后就不能再改變。

public class ExampleClass {static final int staticVar = 10;static {// staticVar = 20; // This would cause a compilation error}
}

四、final 方法

final 方法是指不能被子類重寫的方法。在父類中聲明某個方法為 final,可以防止該方法在子類中被修改。

public class ParentClass {public final void finalMethod() {// Method implementation}
}public class ChildClass extends ParentClass {// public void finalMethod() { // This would cause a compilation error// }
}

五、final

final 類是指不能被繼承的類。將一個類聲明為 final,可以確保該類的實現不會被任何子類修改。

public final class FinalClass {// Class implementation
}// public class SubClass extends FinalClass { // This would cause a compilation error
// }

六、final 關鍵字的實際應用

1. 定義常量

使用 final 關鍵字定義常量,使得這些值在程序運行期間保持不變。

public class Constants {public static final int MAX_VALUE = 100;
}

2. 防止方法被重寫

使用 final 關鍵字防止關鍵方法被子類重寫,從而保證類的行為一致性和安全性。

public class SecurityManager {public final void checkPermission() {// Security check implementation}
}

3. 創建不可變類

通過將類和其所有成員聲明為 final,可以創建不可變類。這種類的實例一旦創建,其狀態就不能改變。

public final class ImmutableClass {private final int value;public ImmutableClass(int value) {this.value = value;}public int getValue() {return value;}
}

4. 優化性能

編譯器和虛擬機可以利用 final 關鍵字對代碼進行優化,因為 final 變量的值是確定的,方法和類不會被修改。

七、final 的一些常見誤區

1. final 變量不能在構造方法中賦值

誤區:final 變量只能在聲明時賦值。 事實:final 變量可以在構造方法中賦值,但只能賦值一次。

public class ExampleClass {final int instanceVar;public ExampleClass(int value) {instanceVar = value;}
}

2. final 類中的所有方法都是 final

誤區:在 final 類中的所有方法都是 final 的。

事實:final 類中的方法默認不是 final 的,但由于類本身不能被繼承,所以方法也不會被重寫。

3. final 變量的引用不能改變

誤區:final 變量的引用不能改變。 事實:對于對象引用,final 意味著引用本身不能改變,但對象的內容可以改變。

public class ExampleClass {final List<String> list = new ArrayList<>();public void addElement(String element) {list.add(element); // This is allowed}
}

結論

final 關鍵字在 Java 中具有重要作用,能夠幫助開發者創建更加安全、穩定和高效的代碼。理解和正確使用 final 關鍵字可以避免很多常見錯誤,并提高代碼的可維護性和性能。

?🌟感謝支持?聽憶.-CSDN博客

🎈眾口難調🎈從心就好

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/44410.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44410.shtml
英文地址,請注明出處:http://en.pswp.cn/web/44410.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

切割01串(牛客小白月賽98)

題意&#xff1a; 給三個整數n&#xff0c;l&#xff0c;r&#xff0c;和一個字符串s&#xff0c;滿足l<|c0-c1|<r就可以切成字符串a和字符串b&#xff0c;c0為字符串a左側出現0的次數&#xff0c;c1為字符串b右側出現1的次數&#xff0c;求最多切割次數 知識點&#x…

Onnx 1-深度學習-概述1

Onnx 1-深度學習-概述1 一: Onnx 概念1> Onnx 介紹2> Onnx 的作用3> Onnx 應用場景4> Onnx 文件格式1. Protobuf 特點2. onnx.proto3協議3> Onnx 模型基本操作二:Onnx API1> 算子詳解2> Onnx 算子介紹三: Onnx 模型1> Onnx 函數功能

昇思學習打卡-8-計算機視覺/FCN圖像語義分割

目錄 FCN介紹FCN所用的技術訓練數據的可視化模型訓練模型推理FCN的優點和不足優點不足 FCN介紹 FCN主要用于圖像分割領域&#xff0c;是一種端到端的分割方法&#xff0c;是深度學習應用在圖像語義分割的開山之作。通過進行像素級的預測直接得出與原圖大小相等的label map。因…

【C++基礎】初識C++(2)--引用、const、inline、nullptr

目錄 一、引用 1.1 引用的概念和定義 1.2 引用的特性 1.3引用的使用 1.4 const引用 1.5 指針和引用的關系 二、inline 三、nullptr 一、引用 1.1 引用的概念和定義 引?不是新定義?個變量&#xff0c;?是給已存在變量取了?個別名&#xff0c;編譯器不會為引?…

微軟的人工智能語音生成器在測試中達到與人類同等水平

微軟公司開發了一種新的神經編解碼語言模型 Vall-E&#xff0c;在自然度、語音魯棒性和說話者相似性方面都超越了以前的成果。它是同類產品中第一個在兩個流行基準測試中達到人類同等水平的產品&#xff0c;而且顯然非常逼真&#xff0c;以至于微軟不打算向公眾開放。 VALL-E …

Node.js 模塊系統

Node.js 模塊系統 Node.js 的模塊系統是其核心特性之一,它允許開發者將代碼組織成可重用的模塊。這種系統促進了代碼的模塊化,使得大型應用程序的構建和管理變得更加容易。本文將深入探討 Node.js 的模塊系統,包括其工作原理、如何創建和使用模塊,以及模塊系統的優勢和局限…

【每日一練】python類和對象現實舉例詳細講解

""" 本節課程目的&#xff1a; 1.掌握類描述現實世界實物思想 2.掌握類和對象的關系 3.理解什么事面向對象 """ #比如設計一個鬧鐘&#xff0c;在這里就新建一個類 class Clock:idNone #鬧鐘的序列號&#xff0c;也就是類的屬性priceNone #鬧…

Git最常用操作速查表

Git常用操作 文章目錄 Git常用操作1. 克隆/拉取2. 分支操作1. 查看分支2. 創建分支3. 切換到分支4. 刪除分支5. 刪除遠程分支6. 推送分支到遠程 3. 暫存庫操作4. Git團隊規范1. 原則2. 分支設計3. commit備注一般規范 1. 克隆/拉取 git clone xxx 從遠程倉庫克隆 git rebase…

【開源之美】:WinMerge Files

一、引言 強大的windows端文件比較工具&#xff0c;跟Beyond Compare相比&#xff0c;更為強大。但是這里我們推薦他的原因&#xff0c;不僅是因為作為一個使用的工具&#xff0c;主要是因為他開源&#xff0c;可以通過調試優秀的源代碼&#xff0c;進一步的提升C項目設計和編…

Alternative to Receptive field in Transformers and what factors impact it

題意&#xff1a;Transformer中感受野的替代概念及其影響因素 問題背景&#xff1a; I have two transformer networks. One with 3 heads per attention and 15 layers in total and second one with 5 heads per layer and 30 layers in total. Given an arbitrary set of d…

什么是數據模型?數據模型與數據治理有什么關系?

在企業數據治理的廣闊領域中&#xff0c;首要且關鍵的一步是明確溝通數據治理的需求。這包括對企業所持有的數據種類、數據存儲位置、以及當前數據管理的具體情況有一個清晰的了解和記錄。了解企業的數據資產是制定有效數據治理策略的基礎。企業需要識別和盤點所有類型的數據資…

AIGC產品經理學習路徑

基礎篇&#xff08;課時 2 &#xff09; AIGC 行業視角 AIGC 的行業發展演進&#xff1a;傳統模型/深度學習/大模型 AIGC 的產品設計演進&#xff1a;AI Embedded / AI Copilot / AI Agen AIGC 的行業產業全景圖 AIGC 的產品應用全景圖 AIGC 職業視角 AI 產品經理/ AIGC…

2974.最小數字游戲

1.題目描述 你有一個下標從 0 開始、長度為 偶數 的整數數組 nums &#xff0c;同時還有一個空數組 arr 。Alice 和 Bob 決定玩一個游戲&#xff0c;游戲中每一輪 Alice 和 Bob 都會各自執行一次操作。游戲規則如下&#xff1a; 每一輪&#xff0c;Alice 先從 nums 中移除一個 …

Spring MVC 全面指南:從入門到精通的詳細解析

引言&#xff1a; Spring MVC&#xff0c;作為Spring框架的一個重要模塊&#xff0c;為構建Web應用提供了強大的功能和靈活性。無論是初學者還是有一定經驗的開發者&#xff0c;掌握Spring MVC都將顯著提升你的Web開發技能。本文旨在為初學者提供一個全面且易于理解的學習路徑…

數據建設實踐之大數據平臺(五)安裝hive

安裝hive 上傳安裝包到/opt/software目錄并解壓 [bigdata@node101 software]$ tar -zxvf hive-3.1.3-with-spark-3.3.1.tar.gz -C /opt/services [bigdata@node101 services]$ mv apache-hive-3.1.3-bin apache-hive-3.1.3 配置環境變量 export JAVA_HOME=/opt/services…

Debezium系列之:驗證mysql、mariadb等兼容mysql協議數據庫賬號權限

Debezium系列之:驗證mysql、mariadb等兼容mysql協議數據庫賬號權限 一、數據庫需要開啟binlog二、創建賬號和賬號需要賦予的權限三、賬號具有權限查看日志信息四、驗證賬號權限五、驗證賬號能否執行show master status六、驗證數據庫是否開啟binlog一、數據庫需要開啟binlog …

實驗9 存儲過程與函數的創建管理實驗

一、實驗目的&#xff1a; 理解存儲過程和函數的概念。掌握創建存儲過程和函數的方法。掌握執行存儲過程和函數的方法。掌握游標的定義、使用方法。 二、實驗內容 1&#xff0e;某超市的食品管理的數據庫的Food表&#xff0c;Food表的定義如表所示&#xff0c; Food表的定義…

【進階篇-Day8:JAVA中遞歸、異常的介紹】

目錄 1、遞歸的介紹和使用1.1 遞歸的介紹1.2 案例案例一&#xff1a;案例二&#xff1a;案例三&#xff1a;案例四&#xff1a; 1.3 總結 2、異常的介紹和使用2.1 異常的介紹&#xff1a;&#xff08;1&#xff09;能夠看懂異常&#xff08;2&#xff09;異常的體系接口和分類&…

Go語言map并發安全,互斥鎖和讀寫鎖誰更優?

并發編程是 Go 語言的一大特色&#xff0c;合理地使用鎖對于保證數據一致性和提高程序性能至關重要。 在處理并發控制時&#xff0c;sync.Mutex&#xff08;互斥鎖&#xff09;和 sync.RWMutex&#xff08;讀寫鎖&#xff09;是兩個常用的工具。理解它們各自的優劣及擅長的場景…

蘋果入局,AI手機或將實現“真智能”?

【潮汐商業評論/原創】 “AI應用智能手機不就是現在的AI手機。” 當被問到現階段對AI手機的看法時&#xff0c;John如是說。“術業有專攻&#xff0c;那么多APP在做AI功能&#xff0c;下載用就是了&#xff0c;也用不著現在換個AI手機啊。” 對于AI手機&#xff0c;或許大多…