Carson帶你學Java:3分鐘帶你全面了解Static靜態(tài)關鍵字


前言

  • Java中腌且,靜態(tài) Static關鍵字使用十分常見
  • 本文全面 & 詳細解析靜態(tài) Static關鍵字软啼,希望你們會喜歡

目錄

示意圖

1. 定義

一種 表示靜態(tài)屬性的 關鍵字 / 修飾符


2. 作用

共用、共享

能有此作用的原因分析:

  1. Java中瓦盛,任何變量 / 代碼存儲時洗显,都是 在編譯時 由系統(tǒng)自動分配內(nèi)存
  2. 在靜態(tài)變量編譯后外潜,所分配的內(nèi)存會一直存在,直到程序退出內(nèi)存才會釋放這個空間
  3. 類加載時挠唆,JVM會把靜態(tài)變量放到 方法區(qū)处窥,被本類 & 本類的所有實例所共用

3. 具體使用

  • Static靜態(tài)修飾符可應用于:類、代碼塊玄组、方法 & 變量
  • 下面滔驾,我將詳細分析

3.1 靜態(tài)類

  • 定義
    使用 Static關鍵字 修飾、定義 為 靜態(tài)的 內(nèi)部類

即:

  1. 靜態(tài)類又名為:靜態(tài)內(nèi)部類
  2. 該類獨立存在俄讹,形式上與外部類有內(nèi)外關系哆致,實際上則沒有,本質(zhì)是為了隱藏自身
  • 具體使用 & 相關規(guī)則
/**
 * 1. 靜態(tài)類的方法 = 靜態(tài) / 非靜態(tài)
 *    (靜態(tài)方法可在外層通過靜態(tài)類調(diào)用患膛,而非靜態(tài)方法必須要創(chuàng)建類的對象后才能調(diào)用)
 * 2. 只能引用外部類的靜態(tài)變量(static摊阀,即類變量)
 * 3. 注:
 *       a. 默認不持有外部類引用、使用不依賴于外部類(與外層類無綁定):即使無創(chuàng)建外層類的對象踪蹬,它一樣存在
 *       b. 若一個內(nèi)部類不是被定義成靜態(tài)內(nèi)部類胞此,那么其成員變量 / 方法不能被定義成靜態(tài)
 *       c. 靜態(tài)內(nèi)部類 & 非靜態(tài)內(nèi)部類在創(chuàng)建時有區(qū)別,下面會詳細說明
 */

// 外部類
public class A {  
    // 靜態(tài)內(nèi)部類
    public static class B{  
    }  
    // 非靜態(tài)內(nèi)部類(即 普通)
    class C{  
    }  
}  

// 靜態(tài)內(nèi)部類b & 非靜態(tài)內(nèi)部類c 創(chuàng)建時的區(qū)別:
A a=new A(); 
A.B b=new A.B(); 
A.C c=a.new C();
  • 靜態(tài)內(nèi)部類 與 內(nèi)部類的區(qū)別
示意圖
  • 特別注意
    a. 加載一個類時跃捣,其內(nèi)部類不會同時被加載豌鹤。
    b. 一個類被加載時刻 = 當且僅當其某個靜態(tài)成員被調(diào)用時(靜態(tài)域、構(gòu)造器枝缔、靜態(tài)方法等)

3.2 靜態(tài)代碼塊

  • 定義
    類加載器加載類的最后1步(類初始化)時,執(zhí)行類構(gòu)造器<clinit>()里需執(zhí)行的一組語句

額外說明

  1. 類初始化 = 真正開始執(zhí)行類中定義Java程序代碼 = 執(zhí)行類構(gòu)造器<clinit>()
  2. <clinit>() = 由編譯器自動收集類中所有類變量的賦值動作&靜態(tài)語句塊中的語句合并產(chǎn)生的
  3. 與類構(gòu)造函數(shù)(即實例構(gòu)造器<init>())不同蚊惯,<clinit>()不需顯式地調(diào)用父類構(gòu)造器愿卸,虛擬機會保證子類的<clinit>()執(zhí)行前,父類的<clinit>()已執(zhí)行完畢
  • 具體使用 & 相關規(guī)則
/**
 * 1. 代碼塊 使用 Static修飾
 * 2. 靜態(tài)塊只會在類加載到內(nèi)存中時執(zhí)行1次
 *    a. 若有多個static代碼塊截型,JVM將按照它們在類中出現(xiàn)的先后順序依次執(zhí)行
 *    b. 靜態(tài)語句塊中只能訪問定義在靜態(tài)語句塊之前的變量趴荸,定義在它之后的變量可以賦值,但不能訪問宦焦。如下實例所示
 */

 public class Test { 

     // 使用靜態(tài)修飾的靜態(tài)代碼塊
     static{ 
         i=0;  // 給變量賦值发钝,可通過編譯 
         System.out.print(i); // 非法, 提示:“非法向前引用” 
     } 

     static int i=1; 
  
 }

3.3 靜態(tài)方法

  • 定義
    使用 Static關鍵字 修飾波闹、定義為靜態(tài)的成員方法

也稱:類方法

  • 具體使用 & 相關規(guī)則
/**
 * 1. 可直接通過類名調(diào)用酝豪,也可通過對象實例調(diào)用
 *    (屬于類,不屬于實例)
 * 2. 任何的實例都可調(diào)用(方便共享精堕、公用)
 * 3. 只能訪問所屬類的靜態(tài)成員變量 & 方法孵淘、不能使用this、super關鍵字
 *   (this = 調(diào)用該函數(shù)的對象歹篓、但由于靜態(tài)方法可以直接使用類名調(diào)用(即可能還沒創(chuàng)建對象)瘫证,所以不可使用this)
 */

// 靜態(tài)方法的申明
public static void a(int param) {

}

3.4 靜態(tài)變量

  • 定義
    使用 Static關鍵字 修飾揉阎、定義為靜態(tài)的成員變量

也稱:類變量

  • 具體使用 & 相關規(guī)則
/**
 * 1. 靜態(tài)變量在內(nèi)存中只有1個拷貝:JVM只為靜態(tài)分配1次內(nèi)存
 *   a. 全部對象共用這個static關鍵字修飾的成員變量,方便對象間共享背捌,節(jié)省內(nèi)存
 *   b. 未被Static修飾的成員變量 = 實例變量:每創(chuàng)建1個實例毙籽,JVM就會為實例變量分配1次內(nèi)存,實例變量在內(nèi)存中可以有多個拷貝(但互相不影響毡庆,更加靈活)
 * 2. 可用類名直接訪問:在加載類的過程中完成靜態(tài)變量的內(nèi)存分配坑赡,(也可通過對象實例訪問)
 *  (屬于類,不屬于實例)
 * 3. 非線程安全:因靜態(tài)變量被類的所有實例共用
 * 4. 局部變量也能被聲明為static
 */

// 靜態(tài)方法的申明
public class A {  

    private static int count = 0;  //靜態(tài)變量的申明
   
}  
  • 靜態(tài)變量與實例變量的區(qū)別
示意圖

至此扭仁,關于Java中的靜態(tài) Static關鍵字講解完畢垮衷。


4. 總結(jié)

本文主要講解了Java中的靜態(tài) Static關鍵字,總結(jié)如下:

示意圖

歡迎關注Carson_Ho的簡書乖坠!

分享Android技術(shù)干貨搀突,追求短、平熊泵、快仰迁,但卻不缺深度


請點贊顽分!因為你的鼓勵是我寫作的最大動力徐许!

相關文章閱讀
Android開發(fā):最全面、最易懂的Android屏幕適配解決方案
Android事件分發(fā)機制詳解:史上最全面卒蘸、最易懂
Android開發(fā):史上最全的Android消息推送解決方案
Android開發(fā):最全面雌隅、最易懂的Webview詳解
Android開發(fā):JSON簡介及最全面解析方法!
Android四大組件:Service服務史上最全面解析
Android四大組件:BroadcastReceiver史上最全面解析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缸沃,隨后出現(xiàn)的幾起案子恰起,更是在濱河造成了極大的恐慌,老刑警劉巖趾牧,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件检盼,死亡現(xiàn)場離奇詭異,居然都是意外死亡翘单,警方通過查閱死者的電腦和手機吨枉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哄芜,“玉大人貌亭,你說我怎么就攤上這事∪想” “怎么了属提?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我冤议,道長斟薇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任恕酸,我火速辦了婚禮堪滨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蕊温。我一直安慰自己袱箱,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布义矛。 她就那樣靜靜地躺著发笔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凉翻。 梳的紋絲不亂的頭發(fā)上了讨,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音制轰,去河邊找鬼前计。 笑死,一個胖子當著我的面吹牛垃杖,可吹牛的內(nèi)容都是我干的男杈。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼调俘,長吁一口氣:“原來是場噩夢啊……” “哼伶棒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起彩库,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤苞冯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侧巨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡鞭达,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年司忱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片畴蹭。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡坦仍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叨襟,到底是詐尸還是另有隱情繁扎,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站梳玫,受9級特大地震影響爹梁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜提澎,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一姚垃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧盼忌,春花似錦积糯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至跨嘉,卻和暖如春川慌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背偿荷。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工窘游, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跳纳。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓忍饰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寺庄。 傳聞我的和親對象是個殘疾皇子拓颓,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容