1. 程式人生 > >java 關鍵字static

java 關鍵字static

在這裡我用簡單的語言給大家說說Static的原理和用法:

原理:

在生活中有一部分東西是可以共享的,在程式碼中也是一樣的,有一部資料也是可以共享的通用的,大家都有的屬性,比如:每個人的國籍,'性別',這部分資料可以放在記憶體中恢復共享一個數據共享區域,就是靜態資料區。就是static


(1)static 關鍵字

static關鍵字可以修飾變數,那麼修飾的成員變數的記憶體空間就會保護記憶體的資料區。

最基本的用法是,static 可以用於修飾成員變數和成員方法,我們將其稱之為靜態變數和靜態方法,直接通過類名來進行訪問。

當一個事物為static時,就意味著這個域或方法不會與包含它的那個類的任何物件例項關聯在一起

,所以從未建立某個類的任何物件,也可以呼叫其static方法或訪問其static域。

(2)static方法

被static修飾的方法屬於類方法,我們稱之為靜態方法,訪問方式為: ClassName.methodName()

由於他在類載入的時候就存在了,它不依賴於任何例項,所以 static 方法必須實現,也就是說他不能是抽象方法 abstract。

(3)static 程式碼塊

靜態程式碼塊也是用於初始化一個類的時候做操作用的,和靜態變數、靜態方法一樣會隨著類的載入一塊執行,而且他可以隨意放,可以存在於該了的任何地方。


面試題目:

1、”static”關鍵字是什麼意思?Java中是否可以覆蓋(override)一個private或者是static的方法?

“static”關鍵字表明一個成員變數或者是成員方法可以在沒有所屬的類的例項變數的情況下被訪問。

Java中static方法不能被覆蓋,因為方法覆蓋是基於執行時動態繫結的,而static方法是編譯時靜態繫結的。static方法跟類的任何例項都不相關,所以概念上不適用。

2、是否可以在static環境中訪問非static變數?

static變數在Java中是屬於類的,它在所有的例項中的值是一樣的。當類被Java虛擬機器載入的時候,會對static變數進行初始化。如果你的程式碼嘗試不用例項來訪問非static的變數,編譯器會報錯,因為這些變數還沒有被創建出來,還沒有跟任何例項關聯上。

3、靜態方法能不能引用非靜態資源?

不能,new的時候才會產生的東西,對於初始化後就存在的靜態資源來說,根本不認識它。

4、靜態方法裡面能不能引用靜態資源?

可以,因為都是類初始化的時候載入的,大家相互都認識。

5、非靜態方法裡面能不能引用靜態資源?

可以,非靜態方法就是例項方法,那是new之後才產生的,那麼屬於類的內容它都認識。