Java中的靜態變量、靜態方法問題


由關鍵字static所定義的變量與方法,分別稱為靜態變量和靜態方法,它們又都被稱為靜態成員

1.靜態方法

  無需本類的對象也可以調用此方法,調用形式為“類名.方法名”,靜態方法常常為其他類提供一些方法而被定義。但是靜態方法和非靜態方法在定義時有兩個需要注意的點

  (1)靜態方法只能訪問靜態數據,而非靜態方法既能訪問靜態數據也能訪問非靜態數據。

  (2)靜態方法中只能訪問靜態方法,而非靜態方法既能訪問靜態方法也能訪問非靜態方法。

造成原因:

  靜態方法會隨着類的定義而分配和裝載進內存中,而且只被分配了一個內存空間,因此類的實例調是共享這個靜態方法的內存的。也是因此,靜態方法如果引用了非靜態的,它無法從內存中找到非靜態的代碼段。

2.靜態變量

  靜態變量與靜態方法類似,由於在類被定義和裝載時,只分配了一塊存儲空間,因此所有此類的實例共享該靜態變量的內存。進而導致只要一個實例中靜態變量發生改變,所有此類的實例所調用的靜態變量都會發生改變。

  需要特別注意一點:static定義的變量會優先於任何其他非static變量定義,在static后跟{}並在其中定義變量,那么這些變量會優先static之前的非static變量定義,這種方法稱為顯式的靜態變量初始化,只會在類第一次被裝載的時候初始化一次。

 

額外點:還有用static定義的類,但是這種類只能是一個內部類(即在其他類的內部定義),但是一旦被定義為靜態類之后,這個類就能類似於一個普通類搬直接被使用,不需要先實例一個外部類。聲明的形式為    外部類名.靜態的內部類名  實例名 = new  外部類名.靜態的內部類名();


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM