java中的靜態變量、靜態方法與靜態代碼塊詳解與初始化順序


 

我們知道類的生命周期分為裝載連接初始化使用卸載的五個過程。
其中靜態代碼在類的初始化階段被初始化。

非靜態代碼則在類的使用階段(也就是實例化一個類的時候)才會被初始化。

  • 靜態變量

 

可以將靜態變量理解為類變量(與對象無關),而實例變量則屬於一個特定的對象。

靜態變量有兩種情況:

 

  • 靜態變量基本數據類型,這種情況下在類的外部不必創建該類的實例就可以直接使用
  • 靜態變量是一個引用。這種情況比較特殊,主要問題是由於靜態變量一個對象的引用,那么必須初始化這個對象之后才能將引用指向它。
  • 因此如果要把一個引用定義成static的必須在定義的時候就對其對象進行初始化

 

 

[java]  view plain copy
 
  1. public class TestForStaticObject{  
  2. static testObject o = new testObject (); //定義一個靜態變量並實例化  
  3. public static void main(String args[]){  
  4. //在main中直接以“類名.靜態變量名.方法名”的形式使用testObject的方法  
  5. }  
  6. }  

 

 

  • 靜態方法

 

類變量不同方法(靜態方法與實例方法)在內存中只有一份無論該類有多少個實例,都共用一個方法

靜態方法與實例方法的不同主要有:

 

  • 靜態方法可以直接使用,而實例方法必須類實例化之后通過對象來調用
  • 外部調用靜態方法時,可以使用“類名.方法名”或者“對象名.方法名”的形式。
  • 實例方法只能使用這種方式對象名.方法名
  • 靜態方法只允許訪問靜態成員。而實例方法中可以訪問靜態成員實例成員
  • 靜態方法中不能使用this(因為this是與實例相關的)。

 

 

  • 靜態代碼塊

 

在java類中,可以將某一塊代碼聲明為靜態的。

 

[java]  view plain copy
 
  1. static {  
  2. //靜態代碼塊中的語句  
  3. }  

 

靜態代碼塊主要用於類的初始化它只執行一次並且在同屬於一個類的main函數之前執行

靜態代碼塊的特點主要有:

 

  • 靜態代碼塊會在類被加載時自動執行
  • 靜態代碼塊只能定義在類里面不能定義在方法里面
  • 靜態代碼塊里變量都是局部變量只在塊內有效。
  • 一個類中可以定義多個靜態代碼塊,按順序執行
  • 靜態代碼塊只能訪問類的靜態成員,而不允許訪問實例成員

 靜態代碼塊和靜態函數的區別

java 靜態代碼塊:

一般情況下,如果有些代碼必須在項目啟動前就執行的時候,需要使用靜態代碼塊,這種代碼是主動執行它只執行一次並且在同屬於一個類的main函數之前執行

靜態函數:

需要在項目啟動的時候就初始化,在不創建對象的情況下,其他程序來調用的時候,需要使用靜態方法,這種代碼是被動執行的.

 

注意:

(1)靜態變量是屬於整個類的變量而不是屬於某個對象的。注意不能把任何方法體內的變量聲明為靜態,例如:
fun()
{
static int i=0;//非法。
}

(2)一個類可以使用不包含在任何方法體中的靜態代碼塊,當類被載入時,靜態代碼塊被執行,且只被執行一次靜態塊常用來執行類屬性的初始化。例如:
static
{
}

主程序類中的的靜態變量先於靜態代碼塊初始化,其后進入主函數類(程序入口處),其后根據靜態函數的調用情況,才能選擇性的初始化。


免責聲明!

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



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