Java基礎學習(七)

問:靜態變量和實例變量的區別?

在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前則不加。

在程序運行時的區別:實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量纔會被分配空間,才能使用這個實例變量。

靜態變量不屬於某個實例對象,而是屬於類的,所以也成爲類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量也就可以被使用了。

總之,實例變量必須創建實例對象纔可以通過這個對象來使用,靜態變量則可以直接使用類名來引用。

public class VariantTest{
    public static int staticVar=0;
    public int instanceVar=0;
    public VarianTest(){
        staticVar++;
        instanceVar++;
    }
}

對於上面這個程序,無論VariantTest類創建多少個實例對象,靜態變量staticVar只有一份存儲空間,並且每創建一個實例對象,staticVar變量就會加1;但是沒創建一個實例對象,就會創建一個instanceVar變量併爲其分配存儲空間,並且每個instanceVar的值都會加1。

問:是否可以從一個static方法內部發出對非static方法的調用?

不可以

因爲非static方法是要與對象連在一起的,必須創建一個對象之後,纔可以在該對象上進行調用,而static方法調用時不需要創建對象,可以直接調用。

也就是說,當一個static方法被調用時,可能沒有創建任何實例對象,如果從一個static方法中發出對非static方法的調用,那個非static方法是要關聯到哪個對象上呢?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章