(一)静态域
如果将静态域定义为 static ,每个类只有一个这样的域。假如给学生类添加一个实例域id与静态域nextId,那么每个学生对象都有一个自己的id域,但这个类的所有实例将共享一个nextId,即这些实例的nextId的内容是一样的。静态域属于类,不属于任何对象,对象调用不了它,只能由类调用。
class Student{
//静态域nextId
private static int nextId=1;
//非静态域
private int id;
...
}
....
Student a = new Stundet(...);
Student b = new Stundet(...);
a.nextId;//对象不可以调用
Student.nextId()//类可以调用
(二)静态常量
静态变量使用的比较少,静态常量使用的比较多。当我们需要用到 π 的值的时候,该怎么获得?
在Math类中定义了一个静态常量PI,(PI为π的值),我们可以Math.PI直接获取PI的值。
public class Math{
...
//加了final是防止被修改
public class static final PI = 3.1415926358979323846;
...
如果去掉static,我们只能通过Math对象来调用了
(三)静态方法
静态方法是一种不能向对象实施操作的方法,也只能由其类调用,不能由对象调用,静态域不能访问实例域,但是可以访问自身的静态域。
public static int getNextid{
retrurn nextId;
//return id; //错误 静态方法不能访问实例域
}
上面的static能去掉吗? 答案是能,但是这样就不是静态方法了,需要由类的对象的引用来调用这个方法了 Student a = new Student(…); a.getNextid();
在下面两种情况下使用静态方法:
1.一个方法不需要访问对象状态,其所需参数都是通过显示参数提供(如 Math.pow)。
2.一个方法只需要访问类的静态域(如 Student,getNextid())。
最常见的静态方法是main方法:public static void main(String[] args){}。
还有一个工厂方法后续会讲。