java中的靜態變量、靜態方法與靜態代碼塊

我們知道類的生命週期分爲裝載、連接、初始化、使用和卸載的五個過程。
其中靜態代碼在類的初始化階段被初始化。而非靜態代碼則在類的使用階段(也就是實例化一個類的時候)纔會被初始化。

  • 靜態變量

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

靜態變量有兩種情況:

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

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

  • 靜態方法

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

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

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

  • 靜態代碼塊

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

static {
//靜態代碼塊中的語句
}

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

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

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



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