Java教程 36 static修饰成员变量

Java中static修饰成员变量的教程

在Java中,成员变量按照是否使用static关键字修饰,可以分为类变量(静态变量)和实例变量。这两种变量在定义、使用以及存储位置上有显著的区别。

1. 类变量(静态变量)

  • 定义:使用static关键字修饰的成员变量。
  • 存储位置:存储在方法区(静态区),在类加载时创建,只有一份,被类的所有实例共享。
  • 访问方式:可以通过类名直接访问,也可以通过实例对象访问(但不推荐),格式为类名.静态变量

2. 实例变量

  • 定义:没有使用static关键字修饰的成员变量。
  • 存储位置:存储在堆内存中,每一个对象都有自己的一份实例变量。
  • 访问方式:只能通过实例对象访问,格式为对象.实例变量

代码示例及注释

以下是一个详细的代码示例,展示了如何定义和使用静态变量与实例变量:

public class VariableExample {
    // 静态变量(类变量),属于类,在内存中只有一份
    static int staticVar = 10;

    // 实例变量,属于对象,每一个对象都有一份
    int instanceVar = 20;

    public static void main(String[] args) {
        // 通过类名访问静态变量
        System.out.println("通过类名访问静态变量: " + VariableExample.staticVar);

        // 创建第一个对象
        VariableExample obj1 = new VariableExample();
        // 通过对象访问实例变量
        System.out.println("通过对象1访问实例变量: " + obj1.instanceVar);

        // 修改对象1的实例变量
        obj1.instanceVar = 30;
        System.out.println("修改后,通过对象1访问实例变量: " + obj1.instanceVar);

        // 创建第二个对象
        VariableExample obj2 = new VariableExample();
        // 通过对象2访问实例变量(注意:此时实例变量与obj1不同)
        System.out.println("通过对象2访问实例变量: " + obj2.instanceVar);

        // 通过对象访问静态变量(不推荐,但合法)
        System.out.println("通过对象1访问静态变量: " + obj1.staticVar);

        // 修改静态变量
        VariableExample.staticVar = 40;
        // 由于静态变量在内存中只有一份,所以所有对象共享同一份值
        System.out.println("修改后,通过对象2访问静态变量: " + obj2.staticVar);
    }
}

输出结果

通过类名访问静态变量: 10
通过对象1访问实例变量: 20
修改后,通过对象1访问实例变量: 30
通过对象2访问实例变量: 20
通过对象1访问静态变量: 10
修改后,通过对象2访问静态变量: 40

内存原理

  • 静态变量:存储在方法区(静态区),在类加载时创建,且只有一份,被类的所有实例共享。
  • 实例变量:存储在堆内存中,每创建一个对象,就会为该对象分配一份实例变量的存储空间。

总结

  • 类变量(静态变量):属于类,在内存中只有一份,用类名调用。
  • 实例变量:属于对象,每一个对象都有一份,用对象调用。

通过理解这两种变量的区别,可以更好地设计Java程序,提高程序的效率和可读性。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容