一、静态字段
我们在开头 Java语法与执行 学过 static关键字是静态的意思,所以再JAVA中用static
修饰的字段,称为静态字段:static field
。
特别的事情来了,再class
中,每个字段都是拥有独立的空间,但是静态字段只有一个共享“空间”,所有实例都会共享该字段。所以无论你用哪个实例去赋值,输出的都是你刚刚设置的值。实例化不起作用为什么可以通过实例变量访问到呢?实例对象能访问静态字段只是因为编译器可以根据实例类型自动转换为类名.静态字段来访问静态对象。其实这个class本身的字段,所以推荐的写法是直接class.静态字段
。
例如:
public class Main {
public static void main(String[] args) {
// 实例化
Man m = new Man("Alis",12);
Man x = new Man("Siri",14);
// 实例化静态对象
m.sorce = 90;
Man.sorce=90;//推荐写法
// 注意打印的是x实例
System.out.println(x.sorce);
x.sorce = 91;
// 注意打印的是m实例
System.out.println(m.sorce);
// 输出:
// 90
// 91
}
}
class Man {
public String name;
public int age;
public static int sorce;
public Man(String name, int age) {
this.name = name;
this.age = age;
}
}
二、静态方法
同样的,用static修饰的方法称为静态方法。和JAVA的静态属性一样,调用静态方法则不需要实例变量,通过类名就可以调用。要注意的是,因为静态方法是class内部的方法,所以静态方法内部,无法访问this变量,也无法访问实例字段,它只能访问静态字段。同样的,其实也是可以通过实例变量来访问该方法的,只是用class会更好。
三、接口静态字段
因为java规定在接口interface
中的字段只能是public static final
类型,所以可以对接口中静态字段进行简写,实际上编译器会自动把该字段变为public static final
类型的。
例如:
public interface Man{
// 编译器会自动加上public statc final:
int MALE = 1;
int FEMALE = 2;
}