温馨提示×

Java成员变量静态与非静态区别

小樊
81
2024-10-12 04:20:52
栏目: 编程语言

Java中的成员变量可以是静态的(static)或非静态的(non-static),它们之间存在以下主要区别:

  1. 存储位置:静态变量存储在方法区,而非静态变量存储在堆内存中。
  2. 共享性:静态变量被类的所有实例共享,而非静态变量只能被当前实例访问。
  3. 生命周期:静态变量随着类的加载而加载,随着类的卸载而销毁;非静态变量则随着对象的创建而创建,随着对象的销毁而销毁。
  4. 默认值:静态变量和非静态变量的默认值相同,都是数据类型的默认值(例如,int类型的默认值为0)。
  5. 访问方式:静态变量可以通过类名直接访问,也可以通过对象访问;非静态变量只能通过对象访问。

下面是一个简单的示例,展示了静态和非静态成员变量的区别:

public class Student {
    // 静态变量
    public static int totalStudents = 0;

    // 非静态变量
    public String name;

    public Student(String name) {
        this.name = name;
        totalStudents++; // 每次创建一个新对象,totalStudents都会增加
    }

    public static void main(String[] args) {
        Student s1 = new Student("Alice");
        Student s2 = new Student("Bob");
        Student s3 = new Student("Charlie");

        // 访问静态变量
        System.out.println("Total students: " + Student.totalStudents); // 输出:Total students: 3

        // 访问非静态变量
        System.out.println("Name of s1: " + s1.name); // 输出:Name of s1: Alice
        System.out.println("Name of s2: " + s2.name); // 输出:Name of s2: Bob
    }
}

在这个示例中,totalStudents是一个静态变量,它在所有Student对象之间共享,并且随着对象的创建而增加。而name是一个非静态变量,每个Student对象都有自己的name副本。

0