在static方法中是不能使用this、super的。在static方法內部不能呼叫非靜態方法和非靜態變數,在非靜態方法中是可以訪問靜態成員和非靜態成員的。可以通過類本身來呼叫static方法和變數(類名.方法名),也可以通過建立物件訪問(本類物件.方法名)。靜態成員是屬於類所有。
總之,static修飾的方法或者變數方便在沒有建立物件的情況下來進行呼叫。
很顯然,被static關鍵字修飾的方法或者變數不需要依賴於物件來進行訪問,只要類被載入了,就可以通過類名去進行訪問。
static只可以用來修飾類成員(不能修飾區域性變數放在方法內部),另外可以編寫static**塊來優化程式效能。
靜態變數和非靜態變數的區別是:靜態變數被所有的物件所共享,在記憶體中只有乙個副本,它當且僅當在類初次載入時會被初始化。而非靜態變數是物件所擁有的,在建立物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響。
static成員變數的初始化順序按照定義的順序進行初始化。
靜態方法可以不依賴任何物件也能進行訪問,所有對於靜態方法是沒有this和super的。由於這個特性,在static方法內部不能呼叫非靜態方法和非靜態變數,在非靜態方法中是可以訪問靜態成員和非靜態成員的。
最常見的靜態方法就是main方法,程式執行main方法的時候沒有建立任何物件,所有只能通過類名呼叫。
形如:
//靜態**塊static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被載入的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。由於靜態**塊只執行一次,所有一般用來靜態**塊來優化程式效能。static
4、靜態成員,構造器,非靜態**塊的執行順序
public
class statictest
//靜態方法
public
static
void
method()
//非靜態方法
public
void
show()
//靜態**塊
static
//非靜態**塊
public
static
void
main(string args)
}
執行結果:
靜態**塊可以看出執行順序是:靜態**塊(靜態變數)——>main方法,靜態方法——>動態**塊(非靜態方法)——>構造器——>非靜態方法。main方法
非靜態**塊
statictest的構造方法
非靜態方法show
靜態方法method
Java中static關鍵字
靜態結構的生命週期要早於非靜態結構,同時 也要晚於非靜態結構 執行結果 變數變數值 c2.nation null c2.nation china public void test2 執行結果 輸出china 內容與靜態屬性大體相同 1.靜態方法內只能呼叫本類靜態屬性或靜態方法 2.靜態方法裡面是不能...
java中static關鍵字
一 可修飾成員變數和方法 靜態函式要注意的事項 1.靜態函式可呼叫類名或物件呼叫,而非靜態函式只能使用物件呼叫。2.靜態函式可直接訪問靜態成員,但不能訪問非靜態成員。原因 靜態函式可通過類名直接呼叫,這時可能還未存在非靜態成員,因為其是根據物件生成的。二 執行順序 靜態 塊的執行順序優先於非靜態 塊...
java中static關鍵字
static 方便在沒有建立物件的情況來呼叫 可以用來修飾類的成員方法 成員變數,塊 內部靜態類 靜態匯入包 1 靜態變數 被static修飾的變數叫靜態變數 或類變數 否則為例項變數,靜態變數類載入時分配一次記憶體,可以直接類名訪問 例項變數建立物件時被初始化,存在多個副本,互不影響。2 靜態方法...