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

avatar
作者
猴君
阅读量:0

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副本。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!