静态变量和实例变量的区别
语法定义上的区别:
- 静态变量:在声明变量时使用
static
关键字。 - 实例变量:不使用
static
关键字。
程序运行时的区别:
-
静态变量:
- 属于类本身,不属于任何实例对象。
- 当类被加载时,静态变量就会被分配空间,可以直接通过类名来引用,不需要创建实例对象。
- 无论创建多少个实例对象,静态变量在内存中只有一个副本。
-
实例变量:
- 属于某个实例对象,是对象的属性。
- 当实例对象被创建时,实例变量才会被分配空间,每个实例对象都有自己的一份实例变量。
- 只能通过实例对象来访问实例变量。
示例代码
下面是一个简单的 Java 程序,演示了静态变量和实例变量的区别:
public class VariantTest {
// 静态变量,属于类
public static int staticVar = 0;
// 实例变量,属于对象
public int instanceVar = 0;
// 构造方法
public VariantTest() {
staticVar++;
instanceVar++;
System.out.println("staticVar = " + staticVar + ", instanceVar = " + instanceVar);
}
public static void main(String[] args) {
// 创建第一个对象
VariantTest obj1 = new VariantTest();
// 创建第二个对象
VariantTest obj2 = new VariantTest();
// 创建第三个对象
VariantTest obj3 = new VariantTest();
}
}
程序输出
运行上述代码,输出结果如下:
staticVar = 1, instanceVar = 1
staticVar = 2, instanceVar = 1
staticVar = 3, instanceVar = 1
分析
-
静态变量
staticVar
:- 每次创建一个新对象时,
staticVar
都会自增 1。 - 因为
staticVar
是静态变量,属于类本身,所以无论创建多少个实例对象,它在内存中只有一个副本。 - 结果是,
staticVar
的值会随着每次创建对象而增加。
- 每次创建一个新对象时,
-
实例变量
instanceVar
:- 每次创建一个新对象时,
instanceVar
都会自增 1。 - 因为
instanceVar
是实例变量,属于每个实例对象,所以每个对象都有自己的instanceVar
副本。 - 结果是,每个对象的
instanceVar
都是独立的,不会相互影响。
- 每次创建一个新对象时,
结论
- 静态变量:共享给所有对象,属于类本身,生命周期与类相同。
- 实例变量:独立于每个对象,属于实例对象,生命周期与实例对象相同。