阅读量:159
Java中的成员变量可以是静态的(static)或非静态的(non-static),它们之间存在以下主要区别:
- 存储位置:静态变量存储在方法区,而非静态变量存储在堆内存中。
- 共享性:静态变量被类的所有实例共享,而非静态变量只能被当前实例访问。
- 生命周期:静态变量随着类的加载而加载,随着类的卸载而销毁;非静态变量则随着对象的创建而创建,随着对象的销毁而销毁。
- 默认值:静态变量和非静态变量的默认值相同,都是数据类型的默认值(例如,int类型的默认值为0)。
- 访问方式:静态变量可以通过类名直接访问,也可以通过对象访问;非静态变量只能通过对象访问。
下面是一个简单的示例,展示了静态和非静态成员变量的区别:
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副本。