靜態成員不能訪問非靜態成員

2021-06-26 15:38:35 字數 897 閱讀 8395

首先static的成員是在類載入的時候初始化的,jvm的classloader的載入,首次主動使用載入,而非static的成員是在建立物件的時候,即new 操作的時候才初始化的;

先後順序是先載入,才能初始化,那麼載入的時候初始化static的成員,此時非static的成員還沒有被載入必然不能使用,而非static的成員是在類載入之後,通過new操作符建立物件的時候初始化,此時static 已經分配記憶體空間,所以可以訪問!

簡單點說:靜態成員屬於類,不需要生成物件就存在了.而非靜態需要生成物件才產生.

所以靜態成員不能直接訪問.  

下面說說靜態的特點:

1.隨著類的載入而載入

也就是,說靜態會隨著類的消失而消失,說明靜態的生命週期最長

2.優先於物件的存在

明確一點:靜態是先存在的物件是後存在的

3.被所有物件共享

4.可以直接被類名多呼叫

例項變數和類變數

的區別1.存放位置

類變數隨著類的載入存在於方法區中,例項變數隨著物件的物件的建立存在於堆記憶體裡

2.生命週期

類變數生命週期最長,隨著「類」的載入而載入,隨著類的消失而消失

例項變數隨著「物件」的消失而消失

靜態的使用注意事項:

1.靜態方法只能訪問靜態成員(包括成員變數和成員方法)

非靜態方法可以訪問靜態也可以訪問非靜態

2.靜態方法中不可以定義this,super關鍵字

因為靜態優先於物件存在,所以靜態方法中不可以出現this,super關鍵字

3.主函式是靜態的。

靜態的利弊

利:對 物件的共享資料進行單獨空間的儲存,節省空間,沒有必要沒乙個物件中都儲存乙份

可以直接被類名所呼叫

弊:生命週期過長,訪問出現侷限性(只能訪問靜態)

為什麼靜態成員不能訪問非靜態成員

註明本文章 首先static的成員是在類載入的時候初始化的,jvm的classloader的載入,首次主動使用載入,而非static的成員是在建立物件的時候,即new 操作的時候才初始化的 先後順序是先載入,才能初始化,那麼載入的時候初始化static的成員,此時非static的成員還沒有被載入必然...

為什麼靜態成員不能訪問非靜態成員

不使用static修飾的成員是非靜態成員 例項成員 物件成員 只能通過物件 例項 來呼叫。而靜態方法中不能使用this引用,即沒有非靜態物件,所以直接不能呼叫非靜態成員。如果確實需要在靜態方法中訪問普通成員,只能重新建立乙個物件 首先static的成員是在類載入的時候初始化的,jvm的classlo...

C 靜態成員函式訪問非靜態成員

如果類沒有被建立,則沒有對應的成員,也就無法訪問 下面這種方法需要先建立類,並將類作為引數傳遞給靜態成員函式才能訪問。include using namespace std class person class student public person static void get age st...