註明本文章**:
首先static的成員是在類載入的時候初始化的,jvm的classloader的載入,首次主動使用載入,而非static的成員是在建立物件的時候,即new 操作的時候才初始化的;
先後順序是先載入,才能初始化,那麼載入的時候初始化static的成員,此時非static的成員還沒有被載入必然不能使用,而非static的成員是在類載入之後,通過new操作符建立物件的時候初始化,此時static 已經分配記憶體空間,所以可以訪問!
簡單點說:靜態成員屬於類,不需要生成物件就存在了.而非靜態需要生成物件才產生.
所以靜態成員不能直接訪問.
下面說說靜態的特點:
1.隨著類的載入而載入
也就是,說靜態會隨著類的消失而消失,說明靜態的生命週期最長
2.優先於物件的存在
明確一點:靜態是先存在的物件是後存在的
3.被所有物件共享
4.可以直接被類名多呼叫
例項變數和類變數的區別
1.存放位置
類變數隨著類的載入存在於方法區中,例項變數隨著物件的物件的建立存在於堆記憶體裡
2.生命週期
類變數生命週期最長,隨著「類」的載入而載入,隨著類的消失而消失
例項變數隨著「物件」的消失而消失
靜態的使用注意事項:
1.靜態方法只能訪問靜態成員(包括成員變數和成員方法)
非靜態方法可以訪問靜態也可以訪問非靜態
2.靜態方法中不可以定義this,super關鍵字
因為靜態優先於物件存在,所以靜態方法中不可以出現this,super關鍵字
3.主函式是靜態的。
靜態的利弊
利:對 物件的共享資料進行單獨空間的儲存,節省空間,沒有必要沒乙個物件中都儲存乙份
可以直接被類名所呼叫
弊:生命週期過長,訪問出現侷限性(只能訪問靜態)
為什麼靜態成員不能訪問非靜態成員
不使用static修飾的成員是非靜態成員 例項成員 物件成員 只能通過物件 例項 來呼叫。而靜態方法中不能使用this引用,即沒有非靜態物件,所以直接不能呼叫非靜態成員。如果確實需要在靜態方法中訪問普通成員,只能重新建立乙個物件 首先static的成員是在類載入的時候初始化的,jvm的classlo...
靜態成員不能訪問非靜態成員
首先static的成員是在類載入的時候初始化的,jvm的classloader的載入,首次主動使用載入,而非static的成員是在建立物件的時候,即new 操作的時候才初始化的 先後順序是先載入,才能初始化,那麼載入的時候初始化static的成員,此時非static的成員還沒有被載入必然不能使用,而...
為什麼靜態方法不能直接訪問非靜態成員
static成員是在jvm的classloader載入類的時候初始化的,而非static的成員是在建立物件,即new 操作的時候才初始化的 類載入的時候初始化static的成員,此時static 已經分配記憶體空間,所以可以訪問 非static的成員還沒有通過new建立物件而進行初始化,所以必然不可...