我们有时候需要在类实例出来的对象实现一种共享的资源.比如说记录某个类一共实例了多少个对象.
1.类变量
static修饰符:
在类中用static修饰符的字段谓之"静态属性"或"类变量".它们与类关联,而不是与对象关联.这样这个类实例出来的对象都共享这个资源.
实例:
class A {
public static int a=0; //声明一个静态变量a
A(){
a++; //每个对象生成时,都会调用这个构造器,对a自增
}
}
public class StaticVariableDemo {
public static void main(String[] args){
System.out.println("创建A的第一个对象前,a="+A.a);
A a1 = new A();
System.out.println("创建A的第二个对象前,a="+A.a);
A a2 = new A();
System.out.println("创建A的第二个对象后,a="+A.a);
}
}
[注:]为了标明这是类变量,直接用类的名称来引用,而不必通过生成的对象来引用.
2.类方法
类方法作用和上述的类变量一样.只和类关联,不和对象关联.存在形式如下:
public static int getNumberOfAutoCars(){
return numberOfAutoCars;
}
实例(对象)方法和类方法对比:
1).实例方法可以直接访问类方法和类变量;
2).类方法不能直接访问实例变量或实例方法.要访问它们必须通过对象引用.类方法不能使用this关键字.因此this是指向当前引用对象.皮之不存,毛之焉附?
3.常量
JAVA平台要定义一个常量需要结合static和final关键字.如下:
static final double PI = 3.141592653
需要注意的是,常量名称习惯了用大写字母.
4.综上所述,给出一个综合实例:
public class AutoCar2{
private String brand; //表示汽车的品牌
private float exhaust; //表示汽车的排汽量
private int speed; //表示汽车的速度
private int id; //添加一个实例变量,作为对象的ID
private static int numberOfAutoCars = 0; //添加一个类变量,用来统计实例化的AutoCar的对象的数量
public AutoCar2(String brand,float exhaust,int speed){
this.brand = brand; //使用构造器参数赋初值
this.exhaust = exhaust;
this.speed = speed;
//增加AutoCar对象的数量并赋值给ID
id = ++numberOfAutoCars;
}
public int getID( ){ //获得id属性的方法
return id; //返回id属性的值
}
public static int getNumberOfAutoCars( ){ //获得AutoCar的对象实例数量的方法
return numberOfAutoCars;
}
public String getBrand(){ //获得属性brand的值
return brand;
}
public float getExhaust(){ //获得属性exhaust的值
return exhaust;
}
public int getSpeed(){ //获得属性speed的值
return speed;
}
public void setSpeed(int newSpeed){ //设置属性speed的值
speed = newSpeed;
}
}