Java關(guān)鍵字static


一. 什么是static關(guān)鍵字

  • 我們可以基于一個類創(chuàng)建多個該類的對象尝江,每個對象都擁有自己的成員,互相獨立英上。然而在某些時候炭序,我們更希望該類所有的對象共享同一個成員啤覆。此時就是 static 大顯身手的時候了!惭聂!
  • Java 中被 static修飾的成員稱為靜態(tài)成員或類成員窗声。它屬于整個類所有,而不是某個對象所有辜纲,即被==類的所有對象==所共享笨觅。
  • 方便在沒有創(chuàng)建對象的情況下進(jìn)行調(diào)用(變量或方法)。
  • 靜態(tài)成員可以使用類名直接訪問耕腾,也可以使用對象名進(jìn)行訪問见剩。

二. 靜態(tài)變量

使用 static 可以修飾變量:

public class Test1 {
    // static修飾的變量為靜態(tài)變量,所有類的對象共享hobby
    static String hobby = "Tedu";
    
    public static void main(String[] args) {
        // 靜態(tài)變量可以直接使用類名來訪問幽邓,無需創(chuàng)建對象
        System.out.println("通過類名訪問hobby:" + Test1.hobby);
        // 創(chuàng)建類的對象
        Test1 t1 = new Test1();
        // 使用對象名訪問靜態(tài)變量
        System.out.println("使用對象名訪hobby:" + t1.hobby);
        // 使用對象名的形式修改靜態(tài)變量的值
        t1.hobby = "cjj";
        // 再次使用類名訪問靜態(tài)白變量炮温,值已經(jīng)被修改
        System.out.println("通過類名訪問hobby:" + Test1.hobby);
    }
}

運(yùn)行結(jié)果:

通過類名訪問hobby:Tedu
使用對象名訪hobby:Tedu
通過類名訪問hobby:cjj

三. static 使用之靜態(tài)方法

使用 static 修飾方法,稱為靜態(tài)方法或類方法:

public class Test01 {
    //使用static關(guān)鍵字聲明靜態(tài)方法
    public static void print() {
        System.out.println("歡迎你:Cjj!");
    }
    
    public static void main(String[] args) {
        //直接使用類名調(diào)用靜態(tài)方法
        Test01.print();
        //也可以通過對象名調(diào)用牵舵,當(dāng)然更推薦使用類名調(diào)用
        Test01 t1 = new Test01();
        t1.print();
    }
}

運(yùn)行結(jié)果:

歡迎你:Cjj!
歡迎你:Cjj!

3.static 使用之靜態(tài)初始化塊
Java 中可以通過初始化塊進(jìn)行數(shù)據(jù)賦值柒啤。如:


注意:

  1. 靜態(tài)成員屬于整個類,當(dāng)系統(tǒng)第一次使用該類時畸颅,就會為其分配內(nèi)存空間直到該類被卸載才會進(jìn)行資源回收担巩!~~
  2. 靜態(tài)方法中可以直接調(diào)用同類中的靜態(tài)成員,但不能直接調(diào)用非靜態(tài)成員没炒。如:
    image

    如果希望在靜態(tài)方法中調(diào)用非靜態(tài)變量涛癌,可以通過創(chuàng)建類的對象,然后通過對象來訪問非靜態(tài)變量送火。如:
    image
  3. 在普通成員方法中拳话,則可以直接訪問同類的非靜態(tài)變量和靜態(tài)變量,如:


    image
  4. 靜態(tài)方法中不能直接調(diào)用非靜態(tài)方法种吸,需要通過對象來訪問非靜態(tài)方法弃衍。如:
public class Test01 {
    String name = "Cjj"; //非靜態(tài)成員變量
    static String hobby = "study"; //靜態(tài)成員變量
    
    //普通成員方法
    public void print1() {
        System.out.println("普通成員方法~~~"); 
    }
    
    //靜態(tài)成員方法
    public static void print2() {
        System.out.println("靜態(tài)成員方法~~~");
    }
    
    public static void main(String[] args) {
        //普通成員方法必須通過對象來調(diào)用
        Test01 t1 = new Test01();
        t1.print1();
        //可以直接調(diào)用靜態(tài)方法
        print2();
    }
}

四.static 使用之靜態(tài)初始化塊

Java 中可以通過初始化塊進(jìn)行數(shù)據(jù)賦值。如:

public class Test01 {
    String name = "chenyw";

    //通過初始化塊為成員變量賦值
    {
        name = "cjj";
    }

    public static void main(String[] args) {
        Test01 test01 = new Test01();
        System.out.println("name="+test01.name);
    }

}

運(yùn)行結(jié)果:

name=cjj

注意:

靜態(tài)初始化塊只在類加載時執(zhí)行坚俗,且只會執(zhí)行一次镜盯,同時靜態(tài)初始化塊只能給靜態(tài)變量賦值,不能初始化普通的成員變量猖败。

我們來看一段代碼:

public class Test02 {
    int num1;
    int num2;
    static int num3;

    public Test02() {// 構(gòu)造方法
        num1 = 11;
        System.out.println("通過構(gòu)造方法為變量num1賦值");
    }

    { // 初始化塊
        num2 = 22;
        System.out.println("通過初始化塊為變量num2賦值");
    }

    static {// 靜態(tài)初始化塊
        num3 = 33;
        System.out.println("通過靜態(tài)初始化塊為靜態(tài)變量num3賦值");
    }
    
    public static void main(String[] args) {
        Test02 t1 = new Test02(); //創(chuàng)建對象
        System.out.println("num1:" + t1.num1);
        System.out.println("num2:" + t1.num2);
        System.out.println("num3:" + num3);
        
    }
}

運(yùn)行結(jié)果:

通過靜態(tài)初始化塊為靜態(tài)變量num3賦值
通過初始化塊為變量num2賦值
通過構(gòu)造方法為變量num1賦值
num1:11
num2:22
num3:33

通過輸出結(jié)果速缆,我們可以看到,程序運(yùn)行時靜態(tài)初始化塊最先被執(zhí)行恩闻,然后執(zhí)行普通初始化塊艺糜,最后才執(zhí)行構(gòu)造方法。由于靜態(tài)初始化塊只在類加載時執(zhí)行一次,所以當(dāng)再次創(chuàng)建對象 hello2 時并未執(zhí)行靜態(tài)初始化塊倦踢。類是在第一次使用的時候才加載送滞,加載之后就不會移除


內(nèi)容來源:https://www.cnblogs.com/chuijingjing/p/9452893.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市辱挥,隨后出現(xiàn)的幾起案子犁嗅,更是在濱河造成了極大的恐慌,老刑警劉巖晤碘,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褂微,死亡現(xiàn)場離奇詭異,居然都是意外死亡园爷,警方通過查閱死者的電腦和手機(jī)宠蚂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來童社,“玉大人求厕,你說我怎么就攤上這事∪怕ィ” “怎么了呀癣?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長弦赖。 經(jīng)常有香客問我项栏,道長,這世上最難降的妖魔是什么蹬竖? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任沼沈,我火速辦了婚禮,結(jié)果婚禮上币厕,老公的妹妹穿的比我還像新娘列另。我一直安慰自己,他們只是感情好旦装,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布访递。 她就那樣靜靜地躺著,像睡著了一般同辣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惭载,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天旱函,我揣著相機(jī)與錄音,去河邊找鬼描滔。 笑死棒妨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播券腔,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼伏穆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纷纫?” 一聲冷哼從身側(cè)響起枕扫,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辱魁,沒想到半個月后烟瞧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡染簇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年参滴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锻弓。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡砾赔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出青灼,到底是詐尸還是另有隱情暴心,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布聚至,位于F島的核電站酷勺,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏扳躬。R本人自食惡果不足惜脆诉,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贷币。 院中可真熱鬧击胜,春花似錦、人聲如沸役纹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽促脉。三九已至辰斋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘸味,已是汗流浹背宫仗。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留旁仿,地道東北人藕夫。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毅贮。 傳聞我的和親對象是個殘疾皇子办悟,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

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