靜態(tài)和實例的區(qū)別

首先介紹一下靜態(tài)成員和實例成員

1.1 什么是靜態(tài)成員

  • 靜態(tài)成員也叫做共享成員能庆,靜態(tài)成員包括:靜態(tài)屬性九杂、靜態(tài)方法闽寡、靜態(tài)塊(靜態(tài)字段)
  • 靜態(tài)成員是通過 static 修飾的屬性、方法尼酿、字段
public class Person{
    //靜態(tài)屬性
    static String name;
    static int age;

    //靜態(tài)方法
    public static void sayHello(){
        System.out.println(name);
    }

    //靜態(tài)塊(靜態(tài)字段)爷狈,為static變量初始化,靜態(tài)塊在首次類名出現(xiàn)時調(diào)用裳擎,但后于分配靜態(tài)變量涎永。
    static{
        age = 20;
    }
}

1.2 什么是實例成員

  • 沒有通過 static 修飾的屬性、方法就是實例成員
public class Person{
    //實例屬性
    String name;
    int age;

    //實例方法
    public void sayHello(){
        System.out.println(name);
    }
}

1.3 區(qū)別

  1. 靜態(tài)成員需要通過 static 修飾,實例成員不需要通過 static 修飾
  2. 靜態(tài)成員屬于類羡微,可以直接通過“類名.靜態(tài)成員”的方式訪問(類名可以省略不寫)谷饿,也可以通過“對象.靜態(tài)成員”的方式訪問(不推薦此用法,容易與實例訪問方法混淆)妈倔。
  3. 實例成員屬于對象博投,必須實例化對象后,才能夠通過“對象.實例成員”的方式訪問盯蝴。
  4. 當程序首次運行到類時毅哗,該類下的所有靜態(tài)成員都會在方法區(qū)中被分配內(nèi)存,且只分配一次捧挺,直到程序退出時才會被釋放虑绵;
    當類實例化對象時,才會為對象的實例成員在堆中分配內(nèi)存闽烙,且實例化幾個對象就會為其分配幾個內(nèi)存
  5. 靜態(tài)方法中不允許調(diào)用實例成員翅睛,而實例方法可以調(diào)用靜態(tài)成員。
    因為靜態(tài)成員在首次運行到所在類時就會分配空間黑竞,實例成員在類實例化時才會分配內(nèi)存捕发,不實例化就不會分配內(nèi)存。所以此時讓靜態(tài)方法去調(diào)用一個不知道存不存在的實例成員(也就是內(nèi)存)很魂,這顯然是不合理的扎酷。

靜態(tài)方法和實例方法的訪問權(quán)限:

靜態(tài)變量 靜態(tài)方法 實例變量 實例方法
靜態(tài)方法 \color{green}{直接訪問} \color{green}{直接訪問} \color{red}{不能直接訪問} \color{red}{不能直接訪問}
實例方法 \color{green}{直接訪問} \color{green}{直接訪問} \color{green}{直接訪問} \color{green}{直接訪問}

`

1.4 常見的問題---判斷代碼編寫是否正確

例1:

public class Test {
    static int age;
    public static void main(String[] args) {
        age = 2;
    }
}

正確
分析:此時是靜態(tài)方法調(diào)用靜態(tài)屬性,age = 2 等同于 Tset.age = 2 代碼正確

例2:

public class Test {
    int age;
    public static void main(String[] args) {
        age = 2;
    }
}

錯誤
分析:此時是靜態(tài)方法調(diào)用實例屬性莫换,代碼錯誤
修改方法:

public class Test {
    int age;
    public static void main(String[] args) {
        Test test = new Test();
        test.age = 2;
    }
}

例3:

public class Test {
    public static void main(String[] args) {

    }
    public void sayHello(){
        
    }

    public static void sayHi(){
        sayHello();
    }
}

錯誤
分析:靜態(tài)方法 sayHi() 調(diào)用實例方法 sayHello() 代碼錯誤
修改方法:去掉sayHi()方法的static,或在sayHello ()方法添加static修飾符

例4:

public static void main(String[] args) {

   }
   public void sayHello(){
       this.sayHi(null);
   }

   public static void sayHi(Test t){
       t.sayHello();
   }

正確
分析:靜態(tài)方法 sayHi() 調(diào)用實例方法 sayHello()骤铃,但因為實例方法 sayHello() 又調(diào)用靜態(tài)方法 sayHi()拉岁,相當于靜態(tài)方法 sayHi()自己調(diào)自己。代碼正確

例5:

public class Test {
    int age;
    public static void main(String[] args) {
        new Test().age = 2;
    }
    public static void sayHi(){
        
    }
    public static void sayHello(){
        this.sayHi();
    }
}

正確
分析:靜態(tài)方法 sayHi() 調(diào)用靜態(tài)方法 sayHello()惰爬,第四行代碼等同于 例2修改方法中的 4喊暖、5 行,代碼正確

最后編輯于
?著作權(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)自己被綠了骇塘。 大學時的朋友給我發(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

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