我們知道類的生命周期分為裝載、連接配接、初始化、使用和解除安裝的五個過程。
其中靜态代碼在類的初始化階段被初始化。而非靜态代碼則在類的使用階段(也就是執行個體化一個類的時候)才會被初始化。
靜态變量
可以将靜态變量了解為類變量(與對象無關),而執行個體變量則屬于一個特定的對象。
靜态變量有兩種情況:
● 靜态變量是基本資料類型,這種情況下在類的外部不必建立該類的執行個體就可以直接使用
● 靜态變量是一個引用。這種情況比較特殊,主要問題是由于靜态變量是一個對象的引用,那麼必須初始化這個對象之後才能将引用指向它。是以如果要把一個引用定義成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/