【后端】Java static 關鍵字詳解

在 Java 中,static 是一個修飾符,用于定義與類相關(而非對象實例相關)的成員。以下是核心知識點和用法:


一、四大用途
  1. 靜態變量(類變量)

    • 作用:屬于類,而非實例。所有實例共享同一副本。
    • 內存分配:類加載時在方法區內存中分配。
    • 示例
      public class Counter {static int count = 0; // 靜態變量public Counter() { count++; }
      }
      
      Counter c1 = new Counter(); // count=1
      Counter c2 = new Counter(); // count=2 (共享)
      
  2. 靜態方法(類方法)

    • 規則
      • 只能訪問靜態成員(變量/方法)。
      • 不能使用 thissuper
      • 可通過類名直接調用。
    • 示例
      public class MathUtils {public static int add(int a, int b) {return a + b;}
      }
      // 調用:MathUtils.add(3, 5);
      
  3. 靜態代碼塊

    • 作用:在類加載時執行一次,用于初始化靜態資源。
    • 執行順序:按定義順序執行。
    • 示例
      public class Database {static {System.out.println("加載數據庫驅動..."); // 類加載時執行}
      }
      
  4. 靜態內部類

    • 特點
      • 不依賴外部類實例。
      • 無法訪問外部類的非靜態成員。
    • 示例
      public class Outer {static class Nested { // 靜態內部類void print() { System.out.println("Nested"); }}
      }
      // 使用:Outer.Nested obj = new Outer.Nested();
      

二、關鍵特性
  1. 生命周期

    • 從類加載開始,到 JVM 結束銷毀。
    • 比實例成員的生命周期長。
  2. 內存分配

    • 靜態變量/方法:存儲在方法區(JDK 8+ 的元空間)。
    • 實例變量/方法:存儲在堆內存的對象中。
  3. 訪問限制

    • 靜態方法中 不能直接訪問非靜態成員(需要先創建對象)。
    • 非靜態方法可以自由訪問靜態成員。

三、使用場景
  1. 共享數據配置

    public class AppConfig {public static final String API_KEY = "ABC123"; // 全局常量
    }
    
  2. 工具類設計

    public class StringUtils {private StringUtils() {} // 防止實例化public static boolean isEmpty(String s) { ... }
    }
    
  3. 單例模式

    public class Singleton {private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
    }
    

四、常見誤區
  1. 重寫問題
    static 方法不能被重寫(Override),只支持方法隱藏(Method Hiding):

    class Parent {static void print() { System.out.println("Parent"); }
    }
    class Child extends Parent {static void print() { System.out.println("Child"); } // 隱藏父類方法
    }
    
  2. 多態失效
    靜態方法在編譯時綁定,不存在運行時多態:

    Parent obj = new Child();
    obj.print(); // 輸出 "Parent"(編譯時類型決定)
    
  3. 線程安全問題
    多個線程同時修改靜態變量需同步:

    public class Counter {private static int count;public static synchronized void increment() { count++; } // 加鎖
    }
    

五、與 final 結合
  • 靜態常量:固定不變的值(如數學常量)
    public class Constants {public static final double PI = 3.1415926;
    }
    

六、總結
特性static 成員非靜態成員
歸屬對象實例
內存分配時機類加載時創建對象時
訪問方式類名.成員 或對象訪問必須通過對象訪問
生命周期與類相同與對象相同
多態支持不支持(靜態綁定)支持(動態綁定)

最佳實踐:優先用 static 定義工具方法、常量,避免濫用導致代碼耦合或內存泄漏。

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

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

相關文章

算法訓練營DAY50 第十一章:圖論part01

98. 所有可達路徑 98. 所有可達路徑 【題目描述】 給定一個有 n 個節點的有向無環圖,節點編號從 1 到 n。請編寫一個程序,找出并返回所有從節點 1 到節點 n 的路徑。每條路徑應以節點編號的列表形式表示。 【輸入描述】 第一行包含兩個整數 N&#…

OpenCV:從入門到實戰的全方位指南

目錄 一、OpenCV 簡介 (一)特點 (二)應用場景 二、OpenCV 的核心模塊 (一)core 模塊 (二)imgproc 模塊 (三)video 模塊 (四)f…

如何在 Ubuntu 24.04 上安裝和配置 TFTP 服務器

了解如何在 Ubuntu 24.04 Linux 上安裝 TFTP 以執行基本的文件傳輸。 簡單文件傳輸協議(TFTP)是標準 FTP 的輕量級替代方案,用于在聯網設備之間傳輸文件。與 FTP 和 HTTP 相比,TFTP 更簡單,無需復雜的客戶端-服務器模型即可操作。這就是為什么該協議用于執行基本文件傳輸…

基于 AXI-Lite 實現可擴展的硬件函數 RPC 框架(附完整源碼)

AXI-Lite 實現RPC調用硬件函數服務 👋 本文介紹如何基于 AXI-Lite 總線設計一個通用的“硬件函數調用框架”。主機端(PS)只需通過寄存器寫入參數與啟動標志,即可觸發 PL 模塊執行指定算法邏輯,并將結果返回。 該機制本…

[spring-cloud: NamedContextFactory ClientFactoryObjectProvider]-源碼閱讀

依賴 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-commons</artifactId><version>4.3.0</version> </dependency>源碼 NamedContextFactory NamedContextFactory 類通過創建多個子…

HBase MOB技術特點及使用場景介紹

在 HBase 2.0 版本之前,雖然 HBase 能夠存儲從 1 字節到 10MB 大小的二進制對象 ,但其讀寫路徑主要針對小于 100KB 的值進行了優化。當面對大量大小在 100KB - 10MB 之間的數據時,傳統的存儲方式就會暴露出問題。例如,當存儲大量的圖片、文檔或短視頻等中等大小對象時,由于…

Ubuntu 配置密鑰+密碼登錄

目錄 1、密鑰生成 2、發送公鑰至 需要連接的服務器 3、選用私鑰登錄 1、密鑰生成 ssh-keygen -t rsa -b 4096 -C "angindem"2、發送公鑰至 需要連接的服務器 將.ssh中的id_rsa.pub 的密鑰&#xff0c;放在authorized_keys中 注意&#xff1a;.ssh 文件夾一定賦予…

谷歌瀏覽器Chrome 緩存遷移

步驟 1&#xff1a;準備數據遷移1. 關閉 Chrome 及所有后臺進程在任務管理器&#xff08;CtrlShiftEsc&#xff09;中結束所有 chrome.exe 進程。 2. 備份并移動原數據- 將 C:\Users\xxx\AppData\Local\Google\Chrome\User Data **整個文件夾**復制到新位置&#xff08;如 G:\…

Java中的RabbitMQ完全指南

Java中的RabbitMQ完全指南 1. 引言 什么是RabbitMQ RabbitMQ是一個開源的消息代理和隊列服務器&#xff0c;實現了高級消息隊列協議&#xff08;AMQP&#xff09;。它充當應用程序之間的消息中間件&#xff0c;允許分布式系統中的不同組件進行異步通信。RabbitMQ使用Erlang語言…

【MCAL】AUTOSAR架構下SPI數據異步DMA收發具體實現

目錄 前言 正文 1.依賴的硬件特性 1.1.SPI硬件特性 1.1.1. TXFIFO Single Move Mode 1.1.2. RXFIFO Single Move Mode 1.1.3. Move Counter模式 1.1.4. PT中斷 1.2.IR硬件特性 1.3.DMA硬件特性 1.3.1. DMA通道硬件請求 1.3.2. DMA循環Buffer 1.3.3. DMA Link List …

【Unity】協程 Async

協程 協程是 Unity 內置的異步機制&#xff0c;通過 yield 暫停執行&#xff0c;實現任務在多幀中分段執行。與普通函數不同&#xff0c;協程可在執行過程中掛起和恢復&#xff0c;呈現"并發"效果&#xff0c;但本質上仍運行于主線程。若在協程中進行耗時操作&#…

《揭秘!10 分鐘洞悉 Prompt、Function Calling、MCP 與 AI agent 奧秘》

Prompt、Function Calling、MCP、AI agent這些術語頻繁闖入我們的視野&#xff0c;它們到底都是什么、有啥關系。只需十分鐘&#xff0c;咱們抽絲剝繭&#xff0c;揭開它們的神秘面紗&#xff0c;輕松掌握這些關鍵概念 并了解AI agent 完整執行流程。 一、提示詞&#xff08;P…

決策樹(回歸樹)全解析:原理、實踐與應用

文章目錄一、概述1.1 介紹1.2 回歸樹和分類樹區別二、重要參數、屬性及接口2.1 criterion&#xff08;不純度衡量指標&#xff09;2.2 回歸樹如何工作&#xff08;核心流程拆解&#xff09;三、用回歸樹擬合正弦曲線&#xff08;實戰案例&#xff09;3.1 繪制正弦曲線3.2 為正弦…

【盤古100Pro+開發板實驗例程】FPGA學習 | HDMI 回環實驗

本原創文章由深圳市小眼睛科技有限公司創作&#xff0c;版權歸本公司所有&#xff0c;如需轉載&#xff0c;需授權并注明出處&#xff08;www.meyesemi.com) 1. 實驗簡介 實驗目的&#xff1a; 完成 HDMI 回環實驗 實驗環境&#xff1a; Window11 PDS2022.2-SP6.4 硬件環境…

鴻蒙系統PC安裝指南

鴻蒙系統PC安裝指南一、安裝DevEco Studio集成開發環境二、下載鴻蒙系統PC三、啟動鴻蒙系統及使用一、安裝DevEco Studio集成開發環境首先訪問華為官網上&#xff0c;注冊并登錄華為賬號&#xff0c;以開始下載所需的軟件。若尚未注冊&#xff0c;請先注冊一個。在官網頁面中&a…

三十九、【擴展工具篇】Allpairspy 組合用例生成器:智能設計高效測試集

三十九、【擴展工具篇】Allpairspy 組合用例生成器:智能設計高效測試集 前言 準備工作 第一部分:后端實現 - `allpairspy` API 1. 創建 `allpairspy` 服務 2. 創建 `allpairspy` API 視圖 3. 注冊 API 路由 第二部分:前端實現 - `Allpairspy` 工具界面 1. 創建 API 服務 (`s…

ZooKeeper 深度實踐:從原理到 Spring Boot 全棧落地

在 Kubernetes 為主流注冊發現的今天&#xff0c;給出如何在 Spring Boot 中基于 ZooKeeper 實現服務注冊/發現、分布式鎖、配置中心以及集群協調的完整代碼與最佳實踐。所有示例均可直接復制運行。 1. ZooKeeper 架構與核心原理 1.1 角色 Leader&#xff1a;處理寫請求&…

可驗證隨機函數-VRF

可驗證隨機函數&#xff08;Verifiable Random Function, VRF&#xff09;是一種結合密碼學技術的偽隨機數生成器&#xff0c;其核心特點是生成的隨機數可被公開驗證&#xff0c;且具有不可預測性和唯一性。以下是VRF的詳細解析&#xff1a;1. 基本定義與核心特性 可驗證性&…

極客大挑戰2020(部分wp)

Roamphp1-Welcome 405請求方法不允許&#xff0c;改一下請求方法 數組繞過&#xff0c;在頁面搜索flag即可&#xff01;本題&#xff1a;就是知道了405是請求方法不允許&#xff01; Roamphp2-Myblog&#xff08;zip協議加文件包含&#xff09; 首先進來就是一個博客頁面&…

ESP32 外設驅動開發指南 (ESP-IDF框架)——GPIO篇:基礎配置、外部中斷與PWM(LEDC模塊)應用

目錄 一、前言 二、GPIO 2.1 GPIO簡介 2.2 GPIO函數解析 2.3 LED驅動 2.4 KEY驅動 三、EXIT 3.1 EXIT簡介 3.2 EXIT函數解析 3.3 EXIT驅動 四、LEDC 4.1 PWM原理解析 4.2 ESP32的LED PWM控制器介紹 4.3 LEDC函數解析 4.3.1 SW_PWM 4.3.2 HW_PWM 4.4 LEDC驅動 …