📜  静态变量和实例变量之间的区别 (1)

📅  最后修改于: 2023-12-03 14:58:43.736000             🧑  作者: Mango

静态变量和实例变量之间的区别

在面向对象编程中,类是一个通过实例化创建的对象模板,而实例变量和静态变量是类的两种基本属性,它们的作用和使用方法也各不相同。

实例变量

实例变量是定义在类中方法外的变量,它属于对象级别的,也就是说每个类的实例都会有一份属于自己的实例变量。实例变量的特点是在对象创建时被初始化,并且只能通过对象来访问和修改。例如:

public class Person {

    private String name; // 实例变量

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

// 创建对象
Person person = new Person();
person.setName("张三");
System.out.println(person.getName()); // 输出:张三

以上代码中,namePerson 类的实例变量,而在实例化后通过 person.setName("张三") 方法给属性赋值,最后通过 person.getName() 方法获取属性值。

静态变量

静态变量是定义在类中方法外的变量,它属于类级别的,也就是说不管创建多少个该类的实例,静态变量只有一份。静态变量的特点是在类加载时被初始化,并且可以通过类名来访问和修改。例如:

public class Person {

    private static String country = "China"; // 静态变量

    public static String getCountry() {
        return country;
    }

    public static void setCountry(String country) {
        Person.country = country;
    }
}

// 访问静态变量
System.out.println(Person.getCountry()); // 输出:China

// 修改静态变量
Person.setCountry("USA");
System.out.println(Person.getCountry()); // 输出:USA

以上代码中,countryPerson 类的静态变量,通过 Person.getCountry()Person.setCountry("USA") 方法访问和修改静态变量的值。需要注意的是,在被多个实例共享的情况下,修改了静态变量的值可能会影响其他实例的访问结果。

总结
  • 实例变量属于对象级别,每个对象有一份,只能通过对象访问和修改。
  • 静态变量属于类级别,只有一份,可以通过类名访问和修改。
  • 实例变量在对象创建时被初始化,静态变量在类加载时被初始化。
  • 实例变量需要依赖对象才能访问,而静态变量不需要依赖对象,可以通过类名直接访问。
  • 实例变量对于每个对象都有一份独立的内存空间,而静态变量是被所有对象共享的。
  • 实例变量可以被继承,子类可以通过 super 关键字访问父类的实例变量,而静态变量不能被继承。
  • 实例变量通常用于描述对象的特征和状态,而静态变量通常用来存储对象之间共享的数据。