class Employee
{
……
private int id;
private static int nextId = 1;
}
如果有1000个Employee对象,则有1000个实例域id,但是只有一个静态域nextId;即使没有一个Employee对象,静态域nextId也存在,它属于类,不属于任何对象。
静态域也成为类域。
静态常量:如果一个域被定义为static final,则这个域就是一个静态常量。不能省略任何一个关键字,若是少了static,则该域变成了一个实例域,需要由类对象对其进行访问。若是省略了final,则该域变成了静态域,静态方法可以对其进行修改。
例子:
public class Math
{
……
public static final double PI=3.14159265358979323864;
……
}
其中PI就是一个静态常量。
静态方法:静态方法是一种不能向对象实施操作的方法。Math的pow方法就是一个静态方法,在运算时,不使用任何Math对象,换句话说,没有隐式的参数this。因为静态方法不能操作对象,所以不能在静态方法中访问实例域,但是静态方法可以访问自身类中的静态域。可以使用对象调用静态方法,但是这样容易引起混淆,因为计算的结果与对象毫无关系,建议还是使用类名,而不是类对象调用静态方法。
例如:
public static int getNextId( )
{
return nextId;
}
但是,如果去掉其中的关键字static,它就成了非静态方法,但是也可以访问类中的静态域,这时就需要由该类的对象来调用该函数。
在下面两种情况下使用静态方法:
1.一个方法不需要访问对象的状态,其所需的参数都是通过显式的提供
2.一个方法只需访问类的静态域