為什麼類的靜態方法不能訪問類的非靜態資源

2022-09-02 07:00:10 字數 401 閱讀 8310

為什麼靜態的方法,只能訪問靜態資源(如靜態屬性或方法),卻不能訪問非靜態資源?而非靜態方法可以訪問靜態資源?

-> 首先,非靜態方法可以訪問靜態資源:比如產生了乙個類的例項,呼叫例項的普通非靜態方法,方法內部訪問另外乙個類的一些靜態資源,如static final 型別的常量,這個很常用,容易理解。

-> 其次,為什麼靜態方法不可以訪問非靜態資源?我們知道,靜態屬性和方法,是隨著類的載入就已經載入進來了,此時類的例項並沒有產生。假設虛擬機器載入類a的靜態方法f1時,f1內部訪問了另外乙個類b的非靜態資源(如屬性b),那麼,我們知道,由於類的非靜態資源只有類的例項可以訪問,只有類產生了例項才能訪問到,很好,那麼請問此時類b例項化了嗎?類b有例項物件出來了嗎?而類a卻要去訪問人家的非靜態資源了,這顯然就是試圖去訪問乙個不存在的資源,所以,原因已經很明顯了。

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

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

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

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

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

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