静态字段
实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。举个例子:
public class Hello{
public static void main(String[] args){
Person p=new Person("sikui",25);
p.number=200;
Person p1=new Person("ss",23);
p1.number=250;
System.out.println(Person.number);
}
}
class Person {
public String name;
public int age;
public static int number=1000;
public Person(String _name,int _age) {
this.name=_name;
this.age=_age;
}
}
对于静态字段,无论修改哪个实例的静态字段,效果都是一样的:所有实例的静态字段都被修改了,原因是静态字段并不属于实例
**对于静态字段可以用:类名.静态字段 ,实例名.静态对象 来访问静态对象。
静态方法
静态方法内部,无法访问this变量,也无法访问实例字段,它只能访问静态字段。
静态方法属于整个类,可以使用类名.方法 ,实例名.方法
例如:
public class Hello{
public static void main(String[] args){
Person.play();
Person p=new Person();
p.play();
}
}
class Person {
public String name;
public int age;
public static int number=1000;
public static void play(){
System.out.println("我是静态方法"+number);
}
}
接口静态字段
因为interface是一个纯抽象类,所以它不能定义实例字段。但是,interface是可以有静态字段的,并且静态字段必须为final类型:
public interface Person {
public static final int MALE = 1;
public static final int FEMALE = 2;
}
实际上,因为interface的字段只能是public static final类型,所以我们可以把这些修饰符都去掉,上述代码可以简写为:
public interface Person {
// 编译器会自动加上public statc final:
int MALE = 1;
int FEMALE = 2;
}