在 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 + "\tprice: " + price + "\t");
prt("bookNumber: " + bookNumber + "\tcount: " + 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();
}
}
程序运行说明:
程序中定义 count 的目的是记录创建对象的数目,但实际运行结果并非预期。因为 count 是实例变量,每个对象在内存中都拥有独立的 count 副本。创建对象时对 count 执行加一操作,仅作用于当前实例的成员变量,而非全局唯一的计数器,因此无法正确统计对象创建的总数。
相反,bookNumber 是静态变量,被该类的所有实例共享。所有对象操作的是同一个 bookNumber 成员变量,每创建一个新对象,bookNumber 的值就会累加 1,从而实现了书籍编号的自动递增。

