如果一個類成員被聲明為static,它就能夠在類的任何對象創(chuàng)建之前被訪問,,而不必引用任何對象,。static 成員的最常見的例子是main( ) 。因為在程序開始執(zhí)行時必須調(diào)用main() ,,所以它被聲明為static,。 聲明為static的變量實質(zhì)上就是全局變量。當聲明一個對象時,,并不產(chǎn)生static變量的拷貝,,而是該類所有的實例變量共用同一個static變量,例如:聲明一個static的變量count作為new一個類實例的計數(shù)。聲明為static的方法有以下幾條限制: 1,、它們僅能調(diào)用其他的static 方法,。 2、它們只能訪問static數(shù)據(jù),。 3,、它們不能以任何方式引用this 或super。 如果你需要通過計算來初始化你的static變量,,你可以聲明一個static塊,,Static 塊僅在該類被加載時執(zhí)行一次。下面的例子顯示的類有一個static方法,,一些static變量,,以及一個static 初始化塊: public class UserStatic { static int a = 3; static int b; static void meth(int x) { System.out.println("x = " + x); System.out.println("a = " + a); System.out.println("b = " + b); } static { System.out.println("Static block initialized."); b = a * 4; } public static void main(String args[]) { meth(42); } } 一旦UseStatic 類被裝載,所有的static語句被運行,。首先,,a被設置為3,接著static 塊執(zhí)行(打印一條消息),,最后,,b被初始化為a*4 或12。然后調(diào)用main(),,main() 調(diào)用meth() ,,把值42傳遞給x。3個println ( ) 語句引用兩個static變量a和b,,以及局部變量x ,。 注意:在一個static 方法中引用任何實例變量都是非法的。 下面是該程序的輸出: Static block initialized. 在定義它們的類的外面,,static 方法和變量能獨立于任何對象而被使用,。這樣,你只要在類的名字后面加點號(.)運算符即可,。例如,,如果你希望從類外面調(diào)用一個static方法,你可以使用下面通用的格式: classname.method( ) 這里,,classname 是類的名字,,在該類中定義static方法??梢钥吹?,這種格式與通過對象引用變量調(diào)用非static方法的格式類似。一個static變量可以以同樣的格式來訪問——類名加點號運算符,。這就是Java 如何實現(xiàn)全局功能和全局變量的一個控制版本,。 總結(jié): 2,、如果不加static修飾的成員是對象成員,,也就是歸每個對象所有的。 3,、加static修飾的成員是類成員,,就是可以由一個類直接調(diào)用,為所有對象共有的,。
Java Static:作為修飾符,, 可以用來修飾變量、方法,、代碼塊(但絕對不能修飾類),。
類的所有對象共同擁有的一個屬性,,也稱為類變量,。這類似于C語言中的全局變量。類變量在類加載的時候初始化,,而且只被初始化一次,。在程序中任何對象對靜態(tài)變量做修改,其他對象看到的是修改后的值,。因此類變量可以用作計數(shù)器,。另外,Java Static變量可以用類名直接訪問,,而不必需要對象,。 2、修飾方法: 類的所有對象共同擁有的一個功能,,稱為靜態(tài)方法。靜態(tài)方法也可以用類名直接訪問,,而不必需要對象,。所以在靜態(tài)方法里不能直接訪問非靜態(tài)變量和非靜態(tài)方法,在Static方法里不能出現(xiàn)this或者super等關(guān)鍵字,。 3,、修飾Java代碼塊: 用static去修飾類里面的一個獨立的代碼塊,稱為靜態(tài)代碼塊,。靜態(tài)代碼塊在類第一次被加載的時候執(zhí)行,,而且只執(zhí)行一次。靜態(tài)代碼塊沒有名字,,因此不能顯式調(diào)用,,而只有在類加載的時候由虛擬機來調(diào)用。它主要用來完成一些初始化操作。 4,、說說類加載: JVM在第一次使用一個類時,會到classpath所指定的路徑里去找這個類所對應的字節(jié)碼文件, 并讀進JVM保存起來,,這個過程稱之為類加載。 可見,,無論是變量,,方法,還是代碼塊,,只要用static修飾,,就是在類被加載時就已經(jīng)"準備好了",也就是可以被使用或者已經(jīng)被執(zhí)行。都可以脫離對象而執(zhí)行,。反之,,如果沒有static,則必須通過對象來訪問,。 |
|