Static 關鍵字:解碼 Java 中的靜態變數
歡迎回到Java 關鍵字基礎系列!這篇文章主要是關於靜態變數——Java 中的一個強大功能,可讓您在同一類別的多個物件之間共享資料。
我們將透過實踐範例和見解來介紹靜態變數的目的、行為和關鍵用例。在單獨的貼文中,我們將深入研究靜態方法以避免過多的內容讓您不知所措。
這篇文章建立在先前文章中討論的概念的基礎上。我建議查看最終關鍵字和靜態區塊,以更深入地了解此處涵蓋的主題。
什麼是靜態變數?
靜態變數屬於類別而不是單一實例。它在類別的所有物件之間共享,並且在這些物件之間保留相同的值。
主要特徵
- 類別級變數:由類別的所有實例共用。
- 初始化一次:當類別被 JVM 載入時。
- 記憶體位置:儲存在方法區中。
- 存取:可以使用類別名稱和物件引用(儘管首選類別名稱)來存取。
程式碼範例:動作中的靜態變數
package keywords.static_keyword; public class StaticVariables { // Static variable: Shared across all instances of the class // Automatically initialized to default value on class loading static int idCounter; // int default value -> 0 // Static final variables // Must be initialized at declaration or in a static block static final String COMPANY_NAME = "TechCorp"; static final String OFFICE_CODE; // Instance variables: Unique to each object int employeeId; String employeeName; // Static final variable Initialized in a static block static { // Default region: US String region = System.getProperty("user.region", "US"); switch (region) { case "EU": regionalOfficeCode = "EU-01"; break; case "APAC": regionalOfficeCode = "AP-11"; break; default: regionalOfficeCode = "US-00"; } System.out.println("Static Block Invoked: Office Code set to " + regionalOfficeCode); } // Constructor: Assigns a unique ID to each object public StaticVariables(String name) { this.employeeName = name; this.employeeId = ++idCounter; // Incrementing the shared counter } // Instance method // Displays instance details along with shared data(static variables) void displayEmployeeDetails() { System.out.println("Employee ID: " + employeeId + ", Name: " + employeeName + ", Company: " + COMPANY_NAME + ", Office Code: " + OFFICE_CODE); } public static void main(String[] args) { // Creating instances to observe static variable behavior StaticVariables emp1 = new StaticVariables("Alice"); StaticVariables emp2 = new StaticVariables("Bob"); emp1.displayEmployeeDetails(); emp2.displayEmployeeDetails(); // Accessing the static variable directly using the class name System.out.println("Total Employees: " + StaticVariables.idCounter); } }
代碼說明
輸出:
Static Block Invoked: Office Code set to US-00 Employee ID: 1, Name: Alice, Company: TechCorp, Office Code: US-00 Employee ID: 2, Name: Bob, Company: TechCorp, Office Code: US-00 Total Employees: 2
示範的關鍵概念:
-
靜態變數:
- 在所有實例之間共用並在實例之間保留其值。
- 範例:idCounter 追蹤已建立的員工數量。
-
靜態最終變數:
- 其值被分配一次且永不改變的常數。
- 範例:COMPANY_NAME 和 OFFICE_CODE。
-
靜態區塊:
- 載入類別時執行一次。
- 用於根據環境配置初始化OFFICE_CODE等複雜的靜態變數。
-
實例變數與方法:
- 每個實例都有唯一的employeeId 和employeeName 值。
-
靜態變數的類別級存取:
- 使用類別名稱存取 idCounter:
package keywords.static_keyword; public class StaticVariables { // Static variable: Shared across all instances of the class // Automatically initialized to default value on class loading static int idCounter; // int default value -> 0 // Static final variables // Must be initialized at declaration or in a static block static final String COMPANY_NAME = "TechCorp"; static final String OFFICE_CODE; // Instance variables: Unique to each object int employeeId; String employeeName; // Static final variable Initialized in a static block static { // Default region: US String region = System.getProperty("user.region", "US"); switch (region) { case "EU": regionalOfficeCode = "EU-01"; break; case "APAC": regionalOfficeCode = "AP-11"; break; default: regionalOfficeCode = "US-00"; } System.out.println("Static Block Invoked: Office Code set to " + regionalOfficeCode); } // Constructor: Assigns a unique ID to each object public StaticVariables(String name) { this.employeeName = name; this.employeeId = ++idCounter; // Incrementing the shared counter } // Instance method // Displays instance details along with shared data(static variables) void displayEmployeeDetails() { System.out.println("Employee ID: " + employeeId + ", Name: " + employeeName + ", Company: " + COMPANY_NAME + ", Office Code: " + OFFICE_CODE); } public static void main(String[] args) { // Creating instances to observe static variable behavior StaticVariables emp1 = new StaticVariables("Alice"); StaticVariables emp2 = new StaticVariables("Bob"); emp1.displayEmployeeDetails(); emp2.displayEmployeeDetails(); // Accessing the static variable directly using the class name System.out.println("Total Employees: " + StaticVariables.idCounter); } }
登入後複製登入後複製
何時使用靜態變數?
- 全域計數器:用於追蹤常見狀態,例如ID產生器或計數器。
- 設定設定:儲存保持不變的值,例如應用程式層級設定。
- 快取:使用靜態變數快取經常使用的資料(注意正確管理記憶體)。
結論
在這篇文章中,我們探討了靜態變數-一個支援跨實例共享狀態的基本功能。了解靜態變數有助於編寫更有效率的程式碼,特別是在管理需要在多個物件之間保持一致的資料時。
在下一篇文章中,我們將深入研究靜態方法,探索它們的行為、限制和最佳實踐。
相關貼文
Java 基礎
陣列面試重點
Java 記憶體基礎
-
集合架構重點
以上是Static 關鍵字:解碼 Java 中的靜態變數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

在使用TKMyBatis進行數據庫查詢時,如何優雅地獲取實體類變量名以構建查詢條件,是一個常見的難題。本文將針...
