什么时候使用静态变量和方法

2019-12-19  本文已影响0人  禾叶super

静态方法和静态变量在调用时非常方便,使用类名.的方式就可以调用。那什么时候该使用静态变量和静态方法呢?

静态变量在程序运行前就已经分配了空间。静态变量属于类,如果一个类中有静态成员变量,那么这个类的所有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 这个值),小钱的修改对小王也不可见。因此共享变量可被使用在需要共享的变量中,如计数器。

静态的变量和方法是属于类的,是共享的,因此不能体现出多态来。从另一个角度考虑,如果一个方法和他所在类的实例对象无关,那么它就应该是静态的,否则就应该是非静态。因此像工具类,一般都是静态的。

上一篇 下一篇

猜你喜欢

热点阅读