對於static關鍵字的理解

static

static方法就是沒有this的方法。在static方法內部不能調用非靜態方法,反過來是可以的。而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用static方法。這實際上正是static方法的主要用途。
方便在沒有創建對象的情況下來進行調用(方法/變量)。
很顯然,被static關鍵字修飾的方法或者變量不需要依賴於對象來進行訪問,只要類被加載了,就可以通過類名去進行訪問。

static可以用來修飾類的成員方法、類的成員變量,另外可以編寫static代碼塊來優化程序性能。

所有的靜態方法和靜態變量都可以通過對象訪問(只要訪問權限足夠)。

靜態方法中不能用this和super關鍵字,不能直接訪問所屬類的實例變量和實例方法,因爲this和super是隨着構造方法而出現,而靜態優先於構造出現,所以靜態只能訪問靜態,不能訪問非靜態,但是非靜態可以訪問靜態。

static方法
static方法一般稱作靜態方法,由於靜態方法不依賴於任何對象就可以進行訪問,因此對於靜態方法來說,是沒有this的,因爲它不依附於任何對象,既然都沒有對象,就談不上this了。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變量和非靜態成員方法,因爲非靜態成員方法/變量都是必須依賴具體的對象才能夠被調用。
  但是要注意的是,雖然在靜態方法中不能訪問非靜態成員方法和非靜態成員變量,但是在非靜態成員方法中是可以訪問靜態成員方法/變量的


靜態方法不能訪問非靜態方法或成員變量原因解析:
程序最終都是在內存中執行,變量只有在內存中佔有一席之地時纔會被訪問,類的靜態成員(變量和方法)屬於類本身,在類加載的時候就會分配內存,可以 通過類名直接去訪問,非靜態成員(變量和方法)屬於類的對象,所以只有在類的對象產生(創建實例)的時候纔會分配內存,然後通過類的對象去訪問。
在一個類的靜態成員中去訪問非靜態成員之所以會出錯是因爲在類的非靜態成員不存在的時候靜態成員就已經存在了,訪問一個內存中不存在的東西當然會出錯

static變量
  static變量也稱作靜態變量,靜態變量和非靜態變量的區別是:靜態變量被所有的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。

static代碼塊
  static關鍵字還有一個比較關鍵的作用就是 用來形成靜態代碼塊以優化程序性能。static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被加載的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。



靜態內部類

內部類字段和方法不能使用static修飾。

但有一種特殊用法是用static修飾內部類。普通類是不允許聲明爲靜態的,只有內部類纔可以。

被static修飾的內部類可以直接作爲一個普通類來使用,而不需先實例一個外部類。

靜態內部類就可以定義靜態成員變量、靜態成員方法
通過new 它所在的類點靜態內部類來使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章