如果将域定义为 static , 每个类中只有一个这样的域。 而每一个对象对于所有的实例域 却都有自己的一份拷贝。 例如, 假定需要给每一个雇员賦予唯一的标识码。 这里给 Employee 类添加一个实例域 id 和一个静态域 nextld:
class Employee
{private static int nextld = 1;
private int id;}
每一个雇员对象都有一个自己的 id 域,
但这个类的所有实例将共享一个 iiextld 域。
换句话说, 如果有 1000 个 Employee 类的对象, 则有 1000 个实例域 id。
但是, 只有一 个静态域 nextld。 即使没有一个雇员对象, 静态域 nextld 也存在。
它属于类, 而不属于任何 独立的对象。
静态变量使用得比较少, 但静态常量却使用得比较多。 例如, 在 Math 类中定义了一个 静态常量:
public static final double PI = 3.14159265358979323846;
于每个类对象都可以对公有域进行修改, 所以, 最好不要将域设计 为public。
果查看一下 System 类, 就会发现有一个 setOut 方法, 它可以将 System.out 设 置为不同的流。 读者可能会感到奇怪, 为什么这个方法可以修改 final 变量的值。 原因在 于, setOut 方法是一个本地方法, 而不是用 Java 语言实现的。 本地方法可以绕过 Java 语 言的存取控制机制。 这是一种特殊的方法, 在自己编写程序时, 不应该这样处理。
静态方法
静态方法是一种不能向?象?施操作的方法
可以????静态方法是?有 this的方法(在一?非静态的方法中,this??表示??
方法的?式??,
的??静态方法不能?? Id?例域, 因?它不能操作?象。但是,??方法可
以??自身?中的??域。下面是使用?种??方法的一?示例:
public static int getNextldO
{
return nextld; // returns static field }
可以通??名?用??方法: int n = Employee.getNextldO;
??方法可以省略??字 static?? 答案是肯定的。
但是, 需要通? Employee??象的 引用?用??方法。
在下面?种情?下使用??方法:
•一 方法不需要访问对象状态, 其所