Java中的靜態(tài)變量、靜態(tài)方法與靜態(tài)代碼塊
我們知道類的生命周期分為裝載、連接、初始化、使用和卸載的五個(gè)過(guò)程。
其中靜態(tài)代碼在類的初始化階段被初始化。而非靜態(tài)代碼則在類的使用階段(也就是實(shí)例化一個(gè)類的時(shí)候)才會(huì)被初始化。
靜態(tài)變量
可以將靜態(tài)變量理解為類變量(與對(duì)象無(wú)關(guān)),而實(shí)例變量則屬于一個(gè)特定的對(duì)象。
靜態(tài)變量有兩種情況:
● 靜態(tài)變量是基本數(shù)據(jù)類型,這種情況下在類的外部不必創(chuàng)建該類的實(shí)例就可以直接使用
● 靜態(tài)變量是一個(gè)引用。這種情況比較特殊,主要問(wèn)題是由于靜態(tài)變量是一個(gè)對(duì)象的引用,那么必須初始化這個(gè)對(duì)象之后才能將引用指向它。因此如果要把一個(gè)引用定義成static的,就必須在定義的時(shí)候就對(duì)其對(duì)象進(jìn)行初始化。
public class TestForStaticObject{ static testObject o = new testObject (); //定義一個(gè)靜態(tài)變量并實(shí)例化 public static void main(String args[]){ //在main中直接以“類名.靜態(tài)變量名.方法名”的形式使用testObject的方法 } } |
靜態(tài)方法
與類變量不同,方法(靜態(tài)方法與實(shí)例方法)在內(nèi)存中只有一份,無(wú)論該類有多少個(gè)實(shí)例,都共用一個(gè)方法。
靜態(tài)方法與實(shí)例方法的不同主要有:
● 靜態(tài)方法可以直接使用,而實(shí)例方法必須在類實(shí)例化之后通過(guò)對(duì)象來(lái)調(diào)用。
● 在外部調(diào)用靜態(tài)方法時(shí),可以使用“類名.方法名”或者“對(duì)象名.方法名”的形式。實(shí)例方法只能使用后面這種方式。
● 靜態(tài)方法只允許訪問(wèn)靜態(tài)成員。而實(shí)例方法中可以訪問(wèn)靜態(tài)成員和實(shí)例成員。
● 靜態(tài)方法中不能使用this(因?yàn)閠his是與實(shí)例相關(guān)的)。
靜態(tài)代碼塊
在java類中,可以將某一塊代碼聲明為靜態(tài)的。
static { //靜態(tài)代碼塊中的語(yǔ)句 } |
靜態(tài)代碼塊主要用于類的初始化。它只執(zhí)行一次,并在main函數(shù)之前執(zhí)行。
靜態(tài)代碼塊的特點(diǎn)主要有:
● 靜態(tài)代碼塊會(huì)在類被加載時(shí)自動(dòng)執(zhí)行。
● 靜態(tài)代碼塊只能定義在類里面,不能定義在方法里面。
● 靜態(tài)代碼塊里的變量都是局部變量,只在塊內(nèi)有效。
● 一個(gè)類中可以定義多個(gè)靜態(tài)代碼塊,按順序執(zhí)行。
● 靜態(tài)代碼塊只能訪問(wèn)類的靜態(tài)成員,而不允許訪問(wèn)實(shí)例成員。
posted on 2012-09-11 10:21 順其自然EVO 閱讀(648) 評(píng)論(0) 編輯 收藏