文章目錄
- 1.什么是static?
- 2.static關鍵字的作用是什么?
- 3.靜態變量和非靜態變量的區別?
- 4.static可以修飾局部變量嗎?
- 5.可以通過this訪問靜態變量嗎?
- 6.靜態方法能否調用非靜態方法?
- 7.靜態變量、普通變量、靜態代碼塊、普通代碼塊和構造函數的執行順序是什么?
- 8.靜態方法可以被重寫嗎?
- 9.抽象(abstract)方法能否是靜態的(static)?
1.什么是static?
static表示全局或靜態的意思,可以用來修飾變量、方法或代碼塊。
2.static關鍵字的作用是什么?
沒有創建對象時,也可以通過類名調用方法和變量。
3.靜態變量和非靜態變量的區別?
- 靜態變量僅在類初次加載時會被初始化,非靜態變量在創建對象時被初始化。
- 靜態變量在內存中只有一個副本;非靜態變量存在多個副本,各個對象擁有的副本互不影響。
- 靜態變量可以通過類和對象訪問,非靜態變量只能通過對象訪問。
- 靜態變量存儲在方法區,非靜態變量存儲在堆。
4.static可以修飾局部變量嗎?
java語法不允許
5.可以通過this訪問靜態變量嗎?
可以。this代表當前對象,靜態變量雖然獨立于對象,但所有的靜態方法和靜態變量都可以通過對象訪問。
6.靜態方法能否調用非靜態方法?
不可以,非靜態方法依賴對象的創建。
7.靜態變量、普通變量、靜態代碼塊、普通代碼塊和構造函數的執行順序是什么?
靜態變量 → 靜態代碼塊 → 普通變量 → 普通代碼塊 → 構造函數
8.靜態方法可以被重寫嗎?
子類可以擁有一個與父類靜態方法相同的方法,編譯不會報錯,但重寫不會生效。
方法的重寫/覆蓋是基于運行時動態綁定的,而static方法是編譯時靜態綁定的。
9.抽象(abstract)方法能否是靜態的(static)?
不能,抽象方法等待重寫,而static方法靜態時編譯,不可重寫。