Java中的static關鍵字整理
阿新 • • 發佈:2018-11-20
特點:
被static修飾的方法或變數在記憶體中只有一個副本,被所有物件共享。
不依賴於任何物件就可以進行訪問。
使用
static變數
- 當且僅當類載入時被初始化
- 初始化順序按照定義的順序初始化
static方法
- 不能訪問非靜態成員變數和非靜態成員方法
- main方法
程式在執行main方法是沒有建立任何物件,因此只有通過類名訪問 - 靜態方法與例項方法區別:
(1)Java中“靜態”有多個意思,至少包括以下兩點:一是在Java語言中使用static修飾方法時,表示“靜態方法”。二是一個方法呼叫到底能否在執行前就確定一個固定的目標(即早繫結和晚繫結),靜態方法屬於早繫結。
(2)在概念中的JVM上的區別:
Java虛擬機器規範第二版中這樣描述它們區域性變數區的不同:
The Java virtual machine uses local variables to pass parameters on method invocation. On class method invocation any parameters are passed in consecutive local variables starting from local variable 0. On instance method invocation, local variable 0 is always used to pass a reference to the object on which the instance method is being invoked (this in the Java programming language). Any parameters are subsequently passed in consecutive local variables starting from local variable
呼叫類方法時,所有引數按順序存放於被呼叫方法的區域性變數區中的連續區域,從區域性變數0開始;在呼叫例項方法時,區域性變數0存放傳入該方法所屬的物件例項(Java中的”this”),所有引數從區域性變數1開始存放在區域性變數區的連續區域中。
從效果上看,這就等於在呼叫例項方法時總是把”this”作為第一個引數傳入被呼叫的方法。static程式碼塊
- 特性:只在類載入的時候執行一次。
- 類初始化順序:
Java中類初始化順序,依次是(靜態變數、靜態初始化塊)>(變數、初始化塊)>構造器。
值得注意的是:
(1)static final 變數在賦值時,值必須編譯前就明確了. 若採用 static 變數進行賦值,—— 只能static 程式碼塊中進行賦值(class檔案中的實現方式)。
(2)成員變數賦值時引用了其它變數時,都會在構造器中被賦值(class檔案中的實現方式)。
參考
http://www.cnblogs.com/dolphin0520/p/3799052.html
http://rednaxelafx.iteye.com/blog/652719
https://blog.csdn.net/csdnno/article/details/52495891