Java static關(guān)鍵字

聲明static屬性

static是Java中定義的一個關(guān)鍵字抑诸,主要是描述全局的概念,所以利用static關(guān)鍵字可以定義屬性與方法

利用static定義屬性

首先我們舉個例子秉馏,創(chuàng)建一個Person類宵喂,其屬性包括姓名、年齡以及國家,對國家使用static關(guān)鍵字并進行研究

代碼如下:

class Person{
    private String name;
    private int age;
    static String country = "俄羅斯";//利用static關(guān)鍵字將country設(shè)置為公共屬性荐吵,且暫不封裝

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public String getInfo(){
        return "姓名:"+name+",年齡"+age+"赊瞬,國家:"+country;
    }
}

public class MyClass {
    public static void main(String[] args) {
        System.out.println(Person.country);//無需實例化對象直接輸出國家
        System.out.println(Person.country = "中國");//公共屬性可以直接進行修改
        System.out.println(new Person("張三",10).getInfo());
    }
}
//輸出結(jié)果:俄羅斯
//        中國
//        姓名:張三先煎,年齡:10,國家:中國

通過以上代碼我們可以發(fā)現(xiàn)巧涧,在修改了國家這個屬性后薯蝎,任意對象的國家屬性均發(fā)生了變化,這就叫做公共屬性谤绳,公共屬性必須通過static定義占锯,且無需實例化對象直接通過類名稱就可訪問袒哥,而對于公共屬性的內(nèi)容保存既不在堆內(nèi)存也不在棧內(nèi)存中,而是會存在于全局數(shù)據(jù)區(qū)之中(所有的方法保存在全局代碼區(qū)之中)

內(nèi)存分析圖如下:

內(nèi)存關(guān)系圖

雖然static的屬性定義在類之中消略,但是其是完全獨立的堡称,不受實例化對象的控制。在90%的情況下都無需使用其關(guān)鍵字艺演,而在需要設(shè)置公共屬性時才適用)


利用static定義方法

利用static定義的屬性可以直接通過類名稱進行訪問却紧,但是static也可以用于方法的定義上,且這個方法也可以直接通過類名稱進行調(diào)用

代碼如下:

class Person{
    private String name;
    private int age;
    private static String country = "俄羅斯";//利用static關(guān)鍵字將country設(shè)置為公共屬性

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public static void setCountry(String country) {//創(chuàng)建static關(guān)鍵字的方法
        Person.country = country;
    }

    public static String getCountry() {
        return country;
    }

    public String getInfo(){
        return "姓名:"+name+"胎撤,年齡"+age+"晓殊,國家:"+country;
    }
}

public class MyClass {
    public static void main(String[] args) {
        System.out.println(Person.getCountry());//無需實例化對象直接輸出屬性
        Person.setCountry("中國");//無需實例化對象直接改變屬性
        System.out.println(Person.getCountry());
        System.out.println(new Person("張三",10));
    }
}
//輸出結(jié)果:
//俄羅斯
//中國
//張三,10伤提,中國

static的方法依然不受到實例化對象的限制巫俺,可以直接通過類名稱調(diào)用,但此時就會出現(xiàn)static方法肿男、非static方法介汹,這兩種方法之間的相互訪問就會一些差異:

  • 所有的非static方法都可以直接調(diào)用static方法static屬性
  • static方法不能夠直接調(diào)用非static方法或者是非static屬性
為什么會出現(xiàn)如上差異:
  • 所有的static屬性或方法可以在類沒有實例化對象的時候進行直接調(diào)用
  • 所有非static屬性或方法必須在類產(chǎn)生實例化對象之后才可以進行調(diào)用

在類設(shè)計的過程之中90%的方法都是用非static方法定義,如果一個類中沒有任何的屬性次伶,那么這個類不需要定義普通方法痴昧,只需要定義static方法
\color{red}{若無屬性依舊定義普通方法,則可能會開辟出無用的堆內(nèi)存冠王,即垃圾空間}


觀察分析主方法(了解)

定義方法時有兩種方案:
  • 某一個方法定義在主類中赶撰,并且由主方法直接調(diào)用:public static 返回值類型 方法名稱(){}

    由于主類中主方法是static方法,因此在主方法里面的方法只能是static方法柱彻,或者是普通方法進行實例化對象調(diào)用豪娜,因為static方法不能直接調(diào)用非static方法

  • 某一種方法定義在類中,并且由實例化對象進行調(diào)用:public 返回值類型 方法名稱(){}

Java主方法拆分:
  • public:是一種訪問權(quán)限哟楷,表示所有的操作者都可以看見

  • static:執(zhí)行一個類的時候輸入:"java 類名稱"瘤载,表示由類直接調(diào)用

  • void:主方法是一切的起點,無需返回值

  • main:是由系統(tǒng)定義好的方法名稱

  • String[] args:程序執(zhí)行時的輸入?yún)?shù)卖擅,初始化參數(shù)的


static關(guān)鍵字應(yīng)用:

static屬性有一個最好的特點:公共屬性鸣奔,所有的對象都可以對其修改

范例:將沒有名字的人的姓名從null設(shè)置為無名氏-編號

代碼如下:

class Person{
    private String name;
    private static int count = 1;//使用static關(guān)鍵字實現(xiàn)全局屬性用于統(tǒng)計個數(shù)
    public Person(){
        this("無名氏-" + count++);
    }
    public Person(String name){
        this.name = name;
        System.out.println(getInfo());
    }
    public String getInfo(){
        return "姓名:"+this.name;
    }
}

public class MyClass {
    public static void main(String[] args) {
        new Person();
        new Person();
        new Person("張三");
        new Person();
    }
}
//輸出結(jié)果 姓名:無名氏-1
//         姓名:無名氏-2
//         姓名:無名氏-3
//         姓名:張三
//         姓名:無名氏-4

總結(jié)

1.在類的首要設(shè)計過程之中不要去考慮static屬性或者是方法

2.使用static方法大部分情況下有兩種可能性:

  • 可以不受到類實例化對象的控制

  • 類中沒有提供普通屬性

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市惩阶,隨后出現(xiàn)的幾起案子挎狸,更是在濱河造成了極大的恐慌,老刑警劉巖断楷,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锨匆,死亡現(xiàn)場離奇詭異,居然都是意外死亡冬筒,警方通過查閱死者的電腦和手機恐锣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門茅主,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人土榴,你說我怎么就攤上這事诀姚。” “怎么了鞭衩?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵学搜,是天一觀的道長。 經(jīng)常有香客問我论衍,道長,這世上最難降的妖魔是什么聚磺? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任坯台,我火速辦了婚禮,結(jié)果婚禮上瘫寝,老公的妹妹穿的比我還像新娘蜒蕾。我一直安慰自己,他們只是感情好焕阿,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布咪啡。 她就那樣靜靜地躺著,像睡著了一般暮屡。 火紅的嫁衣襯著肌膚如雪撤摸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天褒纲,我揣著相機與錄音准夷,去河邊找鬼。 笑死莺掠,一個胖子當著我的面吹牛衫嵌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播彻秆,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼楔绞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唇兑?” 一聲冷哼從身側(cè)響起酒朵,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎幔亥,沒想到半個月后耻讽,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡帕棉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年针肥,在試婚紗的時候發(fā)現(xiàn)自己被綠了饼记。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡慰枕,死狀恐怖具则,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情具帮,我是刑警寧澤博肋,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站蜂厅,受9級特大地震影響匪凡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掘猿,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一病游、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧稠通,春花似錦衬衬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至飞主,卻和暖如春狮惜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背既棺。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工讽挟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人丸冕。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓耽梅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親胖烛。 傳聞我的和親對象是個殘疾皇子眼姐,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355