一:static關鍵字不依賴於this,也就是不依賴於任何對象,在static方法中不能調用非靜態方法(反過來非靜態方法中是可以調用靜態方法的),static關鍵字的主要應用就是在沒有創建對象的前提下去調用該關鍵字修飾的內容.
上面的一句話換種形式說就是static所修飾的內容在類被加載未被初始化的時候就可以被使用.
上面的邏輯就可以解釋爲什麼static方法不可以訪問非靜態方法和非靜態成員變量,卻可以訪問靜態方法和靜態成員變量.因爲非靜態成員變量是依賴於對象進行訪問的,但是static只需在被類加載以後還沒有生成對象的時候就可以被訪問.
for example:
在本例中,由於static void main方法是一個靜態方法,在調用string時由於string不一定有沒有被初始化,所以看吧,自動提示報錯了.
好了,一句話總結一下上面的內容.對於靜態成員變量和靜態方法只能調用靜態成員變量和靜態方法.非靜態成員變量和非靜態成員方法能調用靜態成員變量和靜態方法以及非靜態成員變量和非靜態方法,非靜態成員變量和方法的使用需要實例化.
二:靜態成員變量和非靜態成員變量的區別是: 靜態變量被所有的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。
static成員變量的初始化順序按照定義的順序進行初始化。
三:static代碼塊可以用來優化代碼的性能.因爲他只會在類加載的時候被執行一次.
比較下面兩段代碼:
上面一段a和b在類被加載時只會被加載一次,無論在其他地方被實例化了多少次都只是被加載一次.但是下面一段a和b每次在被實例化的時候都會佔用不同的空間.上下兩段代碼相比下面的比較佔用空間.
四:靜態方法不依賴於this,但是可以通過this關鍵字來訪問static關鍵字.
for example:
五:在Java中static是不可以用來修飾局部變量的,不信你可以試試.
六:static關鍵字不會改變成員訪問權限
for example:
看吧,static關鍵字不會影響訪問權限.右邊的訪問左邊的由private修飾的屬性就會出問題,左邊的訪問右邊的由public修飾的屬性就OK.