静态方法和静态变量在调用时非常方便,使用类名.的方式就可以调用。那什么时候该使用静态变量和静态方法呢?
静态变量在程序运行前就已经分配了空间。静态变量属于类,如果一个类中有静态成员变量,那么这个类的所有new出来的实例对象都共享这个变量。所谓共享就是每一个实例对象都可以访问此静态变量,且对此静态变量的修改对每一个实例可见。
示例1
public class Person {
private static int staticCount; // 静态成员变量
private int count; // 普通成员变量
private String name;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getStaticCount() {
return staticCount;
}
public void setStaticCount(int staticCount) {
Person.staticCount = staticCount;
}
@Override
public String toString() {
return "Person{" +
"count=" + count +
", name='" + name + '\'' +
'}';
}
}
public class Test {
public static void main(String[] args) {
Person person1 = new Person();
person1.setName("小王");
person1.setCount(1);
person1.setStaticCount(1);
Person person2 = new Person();
person2.setName("小钱");
person2.setStaticCount(2);
person2.setCount(2);
System.out.println(person1.getName()+":count="+person1.getCount()+";staticCount="+person1.getStaticCount());
System.out.println(person2.getName()+":count="+person2.getCount()+";staticCount="+person2.getStaticCount());
}
}
运行结果:
image.png
由示例1运行结果可以看出,每个Person实例对象对staticCount的更改均会被共享。而对于count变量来说,小王的修改对小钱不可见(小钱不能拿到count =1 这个值),小钱的修改对小王也不可见。因此共享变量可被使用在需要共享的变量中,如计数器。
静态的变量和方法是属于类的,是共享的,因此不能体现出多态来。从另一个角度考虑,如果一个方法和他所在类的实例对象无关,那么它就应该是静态的,否则就应该是非静态。因此像工具类,一般都是静态的。
网友评论