📜  Java静态变量和非静态变量的区别(1)

📅  最后修改于: 2023-12-03 15:16:38.774000             🧑  作者: Mango

Java静态变量和非静态变量的区别

在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 对象,分别为 demo1demo2。我们调用了 incrementVars() 方法,该方法将两个变量都加一。在输出中可以看到,静态变量被所有实例共享,并在多次调用 incrementVars() 方法后累加。而非静态变量的值则在每个实例中独立维护。