天天看點

java靜态代碼塊和靜态變量_Java中的靜态變量、靜态方法與靜态代碼塊

我們知道類的生命周期分為裝載、連接配接、初始化、使用和解除安裝的五個過程。

其中靜态代碼在類的初始化階段被初始化。而非靜态代碼則在類的使用階段(也就是執行個體化一個類的時候)才會被初始化。

靜态變量

可以将靜态變量了解為類變量(與對象無關),而執行個體變量則屬于一個特定的對象。

靜态變量有兩種情況:

● 靜态變量是基本資料類型,這種情況下在類的外部不必建立該類的執行個體就可以直接使用

● 靜态變量是一個引用。這種情況比較特殊,主要問題是由于靜态變量是一個對象的引用,那麼必須初始化這個對象之後才能将引用指向它。是以如果要把一個引用定義成static的,就必須在定義的時候就對其對象進行初始化。

public class TestForStaticObject{

static testObject o = new testObject (); //定義一個靜态變量并執行個體化

public static void main(String args[]){

//在main中直接以“類名.靜态變量名.方法名”的形式使用testObject的方法

}

}

靜态方法

與類變量不同,方法(靜态方法與執行個體方法)在記憶體中隻有一份,無論該類有多少個執行個體,都共用一個方法。

靜态方法與執行個體方法的不同主要有:

● 靜态方法可以直接使用,而執行個體方法必須在類執行個體化之後通過對象來調用。

● 在外部調用靜态方法時,可以使用“類名.方法名”或者“對象名.方法名”的形式。執行個體方法隻能使用後面這種方式。

● 靜态方法隻允許通路靜态成員。而執行個體方法中可以通路靜态成員和執行個體成員。

● 靜态方法中不能使用this(因為this是與執行個體相關的)。

靜态代碼塊

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

static {

//靜态代碼塊中的語句

}

靜态代碼塊主要用于類的初始化。它隻執行一次,并在main函數之前執行。

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

● 靜态代碼塊會在類被加載時自動執行。

● 靜态代碼塊隻能定義在類裡面,不能定義在方法裡面。

● 靜态代碼塊裡的變量都是局部變量,隻在塊内有效。

● 一個類中可以定義多個靜态代碼塊,按順序執行。

● 靜态代碼塊隻能通路類的靜态成員,而不允許通路執行個體成員。

====================================分割線================================

最新内容請見作者的GitHub頁:http://qaseven.github.io/