1. 程式人生 > >Java中static修飾符的作用

Java中static修飾符的作用

近日在做網路通訊伺服器和客戶端的Java語言開發,碰到了獲取客戶端長連線Channel物件,利用唯一物件Client的獲取方法getSingleClientInstance(),以為可以得到,但是顯示始終為空指標。之後又換了好幾種獲取值的辦法,一直是空指標。最後想著static修飾符的作用不是初始化就給了唯一一個記憶體空間嗎?所以改用在Client屬性中宣告Channel物件為靜態物件,又利用getChannel()獲取這個靜態物件,終於找到你,此時很激動Elate。所以全面的找了一下static修飾符的用法。


既然是修飾符,當然可以修飾一切可以修飾的物件 。 比如,變數、方法、程式碼塊、內部類!也可以這樣理解,static域和非static域的儲存空間是不同的

,被static修飾符修飾的物件,都被儲存在靜態儲存區,當然,每個類的方法也是在靜態儲存區的。這也就是所說的static修飾的變數和方法被稱為類屬性類方法,不隸屬於哪一個物件。

1. 變數
一個變數有了static修飾符,記憶體會為它分配唯一的一塊儲存空間。程式跑起來的時候,變數就存在在記憶體裡了。誰要用它,就去訪問一下它所在的記憶體。

2. 方法
一個方法被static修飾,可直接訪問;不被static修飾,就需要用物件來訪問了。

3. 程式碼塊
靜態塊–>非靜態塊–>建構函式的順序執行。
載入靜態塊時為它分配固定的記憶體,程式結束時記憶體才被釋放。而非靜態塊和建構函式則是new一次執行一次。

4. 內部類
只能修飾內部類。
靜態內部類也可以擁有靜態方法和非靜態方法
靜態內部類只可以訪問外部類的靜態成員和靜態方法,不可以訪問非靜態成員和非靜態方法
靜態內部類訪問自己內部的靜態成員和靜態方法時,也是通過點出來的,不過在前面需要加上外部類的名字。

5.靜態導包
靜態導包用法,將類的方法直接匯入到當前類中,從而直接使用“方法名”即可呼叫類方法。在單元測試中用的多。比如Assert類的靜態匯入。

6. 注意事項
被static修飾的方法中不能出現非static物件。