為什麼靜態方法無法直接呼叫非靜態成員變數和方法

2021-10-14 00:07:46 字數 717 閱讀 9394

靜態方法無法直接呼叫非靜態成員變數和方法 看到這句話,要想到形容的是這樣的如下

靜態方法裡面無法呼叫非靜態變數

下面在寫乙個對比非靜態的方法和靜態方法呼叫變數對比

問題原因

靜態變數和靜態的方法是屬於類,不屬於物件,呼叫的時候不需要例項化(當然如果你非要例項化之後在呼叫也是可以的),

非靜態的變數和方法是屬於物件的,呼叫的需要先例項化,這也就是上面中的name報錯的原因,

大家需要注意,無法直接呼叫,並不是無法使用,我們例項化物件之後就可以呼叫的.

為了更好的理解,我寫了乙個demo

public class student 

public static void ***()

public static void main(string args)

}

可以看到,靜態變數可以直接呼叫,靜態方法輸入類的,可以直接通過類.方法 的方法直接使用

非靜態的變數在靜態的方法中需要例項化物件,即是student student = new student(); 例項化物件student 然後通過物件呼叫方法和變數

為什麼靜態方法不能呼叫非靜態方法?

1.靜態方法是屬於類的,即靜態方法是隨著類的載入而載入的,在載入類時,程式就會為靜態方法分配記憶體,而非靜態方法是屬於物件的,物件是在類載入之後建立的,也就是說靜態方法先於物件存在。2.當你建立乙個物件時,程式為其在堆中分配記憶體,一般是通過this指標來指向該物件。靜態方法不依賴於物件的呼叫,它是...

為什麼靜態方法不能直接訪問非靜態成員

static成員是在jvm的classloader載入類的時候初始化的,而非static的成員是在建立物件,即new 操作的時候才初始化的 類載入的時候初始化static的成員,此時static 已經分配記憶體空間,所以可以訪問 非static的成員還沒有通過new建立物件而進行初始化,所以必然不可...

為什麼靜態方法不能直接訪問非靜態成員?

static成員是在jvm的classloader載入類的時候初始化的,而非static的成員是在建立物件,即new 操作的時候才初始化的 類載入的時候初始化static的成員,此時static 已經分配記憶體空間,所以可以訪問 非static的成員還沒有通過new建立物件而進行初始化,所以必然不可...