在java中聲明類的成員變量和成員方法時,可以使用static關鍵字把成員聲明為靜態成員。靜態變量也叫類變量,非靜態變量叫實例變量,靜態方法也叫類方法,非靜態方法叫實例方法。
類變量屬于整個類,一個類可以創建多個對象,但類的每個靜態變量在內存中只有一份拷貝為該類的所有對象共享。類變量(類方法)不用創建對象就可以直接通過類名訪問。下面舉例說明類變量與實例變量的區別:
class UseBook{
String name;
float price;
int count=0; //實例變量,記錄創建對象的個數
static int bookNumber=100;//靜態變量,書的起始編號為100
UseBook(String n,float p){
name = n;
price = p;
count++;
bookNumber++;
}
void output(){
prt("name: " + name + "\t" + "price: " + price + "\t");
prt("bookNumber: " + bookNumber + "\t" + "count: " + count + "\t") ;
}
public static void prt(String s){
System.out.print(s);
}
public static void main(String[] args){
UseBook b1,b2,b3;
b1=new UseBook("java2",36.0f);
b1.output();
b2=new UseBook("c++",40.0f);
b2.output();
b3=new UseBook("vb",20.0f);
b3.output();
}
}
結果如下所示:
name: java2 price: 36.0 bookNumber: 101 count: 1
name: c++ price: 40.0 bookNumber: 102 count: 1
name: vb price: 20.0 bookNumber: 103 count: 1
程序運行說明:程序中定義count的目的是記錄創建對象的數目,但運行結果卻不是期望的輸出。因為每個對象都擁有一個實例變量count,創建對象時,對count加一的操作是對每個對象的count成員而不是對一個唯一的count操作,所以無法記錄創建對象的個數。而bookNumber是靜態變量,為所有對象共享,所有對象操作的是同一個bookNumber成員變量,每創建一個對象bookNumber值增加1,實現了書的自動編號。