Java:關於Static靜態關鍵字的那些小事 原

前言

  • Java中,靜態 Static關鍵字使用十分常見
  • 本文全面 & 詳細解析靜態 Static關鍵字,希望你們會喜歡

目錄

示意圖

1. 定義
一種 表示靜態屬性的 關鍵字 / 修飾符

2. 作用
共用、共享

能有此作用的原因分析:

Java中,任何變量 / 代碼存儲時,都是 在編譯時 由系統自動分配內存
在靜態變量編譯後,所分配的內存會一直存在,直到程序退出內存纔會釋放這個空間
類加載時,JVM會把靜態變量放到 方法區,被本類 & 本類的所有實例所共用
3. 具體使用
Static靜態修飾符可應用於:類、代碼塊、方法 & 變量
下面,我將詳細分析
3.1 靜態類
定義
使用 Static關鍵字 修飾、定義 爲 靜態的 內部類
即:

靜態類又名爲:靜態內部類
該類獨立存在,形式上與外部類有內外關係,實際上則沒有,本質是爲了隱藏自身
具體使用 & 相關規則

  • 靜態內部類 與 內部類的區別
  • 示意圖
  • 特別注意
    a. 加載一個類時,其內部類不會同時被加載。
    b. 一個類被加載時刻 = 當且僅當其某個靜態成員被調用時(靜態域、構造器、靜態方法等)
  • Java架構交流學習圈:874811168 面向1-3年經驗 Java開發人員 幫助突破瓶頸 提升思維能力
  • 3.2 靜態代碼塊
    定義
    類加載器加載類的最後1步(類初始化)時,執行類構造器<clinit>()裏需執行的一組語句
    額外說明

    類初始化 = 真正開始執行類中定義Java程序代碼 = 執行類構造器<clinit>()
    <clinit>() = 由編譯器自動收集類中所有類變量的賦值動作&靜態語句塊中的語句合併產生的
    與類構造函數(即實例構造器<init>())不同,<clinit>()不需顯式地調用父類構造器,虛擬機會保證子類的<clinit>()執行前,父類的<clinit>()已執行完畢

  • 具體使用 & 相關規則

3.3 靜態方法

  • 定義
    使用 Static關鍵字 修飾、定義爲靜態的成員方法

也稱:類方法

  • 具體使用 & 相關規則

 

3.4 靜態變量

  • 定義
    使用 Static關鍵字 修飾、定義爲靜態的成員變量

也稱:類變量

  • 具體使用 & 相關規則

/**
 * 1. 靜態變量在內存中只有1個拷貝:JVM只爲靜態分配1次內存

    Java架構交流學習圈:874811168 面向1-3年經驗 Java開發人員 幫助突破瓶頸 提升思維能力
 *   a. 全部對象共用這個static關鍵字修飾的成員變量,方便對象間共享,節省內存
 *   b. 未被Static修飾的成員變量 = 實例變量:每創建1個實例,JVM就會爲實例變量分配1次內存,實例變量在內存中可以有多個拷貝(但互相不影響,更加靈活)
 * 2. 可用類名直接訪問:在加載類的過程中完成靜態變量的內存分配,(也可通過對象實例訪問)
 *  (屬於類,不屬於實例)
 * 3. 非線程安全:因靜態變量被類的所有實例共用
 * 4. 局部變量也能被聲明爲static
 */

// 靜態方法的申明
public class A {  

    private static int count = 0;  //靜態變量的申明
   
}  

  • 靜態變量與實例變量的區別

示意圖

至此,關於Java中的靜態 Static關鍵字講解完畢。

4. 總結

  • 本文主要講解了Java中的靜態 Static關鍵字,總結如下:

示意圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章