📅  最后修改于: 2023-12-03 15:16:38.774000             🧑  作者: Mango
在Java中,变量分为静态变量和非静态变量。它们之间的区别如下:
静态变量在类加载的时候就会被创建,而非静态变量则需要在实例化对象时才会被创建。
静态变量存储在方法区的静态域中,而非静态变量存储在堆中的实例域中。
静态变量的生命周期与类的生命周期相同,当程序结束或类被卸载时才会被释放。而非静态变量的生命周期与对象的生命周期相同,当对象被垃圾回收器回收时才会被释放。
静态变量可以直接通过类名来调用,而非静态变量必须通过实例化对象来调用。
静态变量可以被所有实例共享,也可以被类的所有方法访问。而非静态变量只能被实例化对象访问和修改。
下面是一个示例代码,演示了静态变量和非静态变量的区别:
public class Demo {
private static int staticVar = 0;
private int instanceVar = 0;
public static void main(String[] args) {
Demo demo1 = new Demo();
Demo demo2 = new Demo();
System.out.println("Before incrementing static var: " + staticVar); // Output: 0
System.out.println("Before incrementing instance var: " + demo1.instanceVar); // Output: 0
demo1.incrementVars();
System.out.println("After incrementing demo1 vars:");
System.out.println("Static var: " + staticVar); // Output: 1
System.out.println("Instance var: " + demo1.instanceVar); // Output: 1
demo2.incrementVars();
System.out.println("After incrementing demo2 vars:");
System.out.println("Static var: " + staticVar); // Output: 2
System.out.println("Instance var: " + demo2.instanceVar); // Output: 1
}
public void incrementVars() {
staticVar++;
instanceVar++;
}
}
在上面的示例代码中,staticVar
是一个静态变量,instanceVar
是一个非静态变量。我们创建了两个 Demo
对象,分别为 demo1
和 demo2
。我们调用了 incrementVars()
方法,该方法将两个变量都加一。在输出中可以看到,静态变量被所有实例共享,并在多次调用 incrementVars()
方法后累加。而非静态变量的值则在每个实例中独立维护。