天天看點

JAVA中static關鍵字(靜态)的作用,以及成員變量與靜态變量的差別,什麼時候用static

如果我們在類中這樣定義

class Man{
    String mane ;
    String  country = "CN";
    public void show()
    {
        System.out.println(country+":"+mane);
    }
}
           

即:每new一個對象,指派人名之後,統一用CN(中國)這個國家

假設我們new了三個對象

JAVA中static關鍵字(靜态)的作用,以及成員變量與靜态變量的差別,什麼時候用static

我們可以看到

country

我們都是統一

CN

的但是還是分别給指派到建立的對象中,這樣就浪費記憶體了

是以我們就可以用

static

修飾符,讓它成為靜态變量(類變量)

即:

class Man{
    String mane ;
    static String  country = "CN";
    public void show()
    {
        System.out.println(country+":"+mane);
    }
}
           
JAVA中static關鍵字(靜态)的作用,以及成員變量與靜态變量的差別,什麼時候用static

這樣我們每new一個對象,它們都共享了 CN了

節省記憶體

同時static修飾符修飾之後的成員,類和對象都可以對它進行調用

System.out.println(p.country);//對象調用static修飾的成員

System.out.println(Man.country);//類調用static修飾的成員

static的特點:

特點:
        1.static是一個修飾符,用于修飾成員.
        
        2.static修飾的成員被是以的對象所共享
        
        3.static優先于對象存在,因為static的成員随着類的加載就已經存在了.
        
        4.static修飾成員多了一種調用方式,就可以直接被類名所調用.   類名.靜态成員
        
        5.static修飾的資料是共享資料,對象中存儲的是特有的資料.
           

成員變量和靜态變量的差別?

1,兩個的生命周期不同.
        成員變量随着對象的建立而存在,随着對象的被回收而釋放.
        靜态變量随着類的加載而存在,随着類的消失而消失.

    2,調用方式不同.
        成員變量隻能被對象調用.
        靜态變量可以被對象調用,還可以被類名調用.

    3,别名不同.
        成員變量也稱為執行個體變量.
        靜态變量稱為類變量.

     4,資料存儲位置不同
        成員變量存儲在堆記憶體的對象中,是以也叫對象的特有資料.
        靜态變量資料存儲在方法區(的靜态區),是以也叫對象的共享資料.
           

static(靜态)修飾使用的注意事項:

1.靜态方法隻能通路靜态成員.(非靜态既可以通路靜态,又可以通路非靜态)
2.靜态方法中,不可以使用this或super關鍵字
3.主函數是靜态的.
           

static(靜态)修飾什麼時候用?

1.靜态變量.
        當分析對象中所具備的成員變量的值都是相同的.
        這時這個成員就可以被靜态修飾.
        隻要資料在對象中都是不同的,就是對象的特有資料,必須存儲在對象中,是非靜态的
        如果是相同的資料,對象不需要修改,隻需要使用即可,不需要存儲在對象中,定義成靜态的

    2.靜态函數.
    函數是否靜态修飾,就參考一點,就是該函數功能是否有通路到對象的特有資料
    簡單點說,從源代碼看,該功能是否需要通路非靜态的成員變量,如果需要,該功能就是非靜态的.
    如果不需要,就可以将該功能定義成靜态的.
    當然也可以定義成非靜态,但是非靜态需要被對象調用,而建立對象調用非靜态的沒有通路特有
    資料的方法,該對象的建立沒有意義,還浪費記憶體.