有時(shí)你希望定義一個(gè)類(lèi)成員,使它的使用完全獨立于該類(lèi)的任何對象。通常情況下,類(lèi)成員必須通過(guò)它的類(lèi)的對象訪(fǎng)問(wèn),但是可以創(chuàng )建這樣一個(gè)成員,它能夠被它自己使用,而不必引用特定的實(shí)例。在成員的聲明前面加上關(guān)鍵字static(靜態(tài)的)就能創(chuàng )建這樣的成員。如果一個(gè)成員被聲明為static,它就能夠在它的類(lèi)的任何對象創(chuàng )建之前被訪(fǎng)問(wèn),而不必引用任何對象。你可以將方法和變量都聲明為static。static 成員的最常見(jiàn)的例子是main( ) 。因為在程序開(kāi)始執行時(shí)必須調用main() ,所以它被聲明為static。
聲明為static的變量實(shí)質(zhì)上就是全局變量。當聲明一個(gè)對象時(shí),并不產(chǎn)生static變量的拷貝,而是該類(lèi)所有的實(shí)例變量共用同一個(gè)static變量。聲明為static的方法有以下幾條限制:
1.它們僅能調用其他的static 方法。
2.它們只能訪(fǎng)問(wèn)static數據。
它們不能以任何方式引用this 或super(關(guān)鍵字super 與繼承有關(guān))。
如果你需要通過(guò)計算來(lái)初始化你的static變量,你可以聲明一個(gè)static塊,Static 塊僅在該類(lèi)被加載時(shí)執行一次。下面的例子顯示的類(lèi)有一個(gè)static方法,一些static變量,以及一個(gè)static 初始化塊:
// Demonstrate static variables,methods,and blocks.
class UseStatic {
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 類(lèi)被裝載,所有的static語(yǔ)句被運行。首先,a被設置為3,接著(zhù)static 塊執行(打印一條消息),最后,b被初始化為a*4 或12。然后調用main(),main() 調用meth() ,把值42傳遞給x。3個(gè)println ( ) 語(yǔ)句引用兩個(gè)static變量a和b,以及局部變量x 。
注意:在一個(gè)static 方法中引用任何實(shí)例變量都是非法的。
下面是該程序的輸出:
Static block initialized.
x = 42
a = 3
b = 12
在定義它們的類(lèi)的外面,static 方法和變量能獨立于任何對象而被使用。這樣,你只要在類(lèi)的名字后面加點(diǎn)號運算符即可。例如,如果你希望從類(lèi)外面調用一個(gè)static方法,你可以使用下面通用的格式:
classname.method( )
這里,classname 是類(lèi)的名字,在該類(lèi)中定義static方法??梢钥吹?,這種格式與通過(guò)對象引用變量調用非static方法的格式類(lèi)似。一個(gè)static變量可以以同樣的格式來(lái)訪(fǎng)問(wèn)——類(lèi)名加點(diǎn)號運算符。這就是Java 如何實(shí)現全局功能和全局變量的一個(gè)控制版本。
下面是一個(gè)例子。在main() 中,static方法callme() 和static 變量b在它們的類(lèi)之外被訪(fǎng)問(wèn)。
class StaticDemo {
static int a = 42;
static int b = 99;
static void callme() {
System.out.println("a = " + a);
}
}
class StaticByName {
public static void main(String args[]) {
StaticDemo.callme();
System.out.println("b = " + StaticDemo.b);
}
}
下面是該程序的輸出:
a = 42
b = 99
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。