静态变量和实例变量的区别?

静态变量和实例变量的区别

语法定义上的区别:
  • 静态变量 :在声明变量时使用 static 关键字。
  • 实例变量 :不使用 static 关键字。
程序运行时的区别:
  • 静态变量

    • 属于类本身,不属于任何实例对象。
    • 当类被加载时,静态变量就会被分配空间,可以直接通过类名来引用,不需要创建实例对象。
    • 无论创建多少个实例对象,静态变量在内存中只有一个副本。
  • 实例变量

    • 属于某个实例对象,是对象的属性。
    • 当实例对象被创建时,实例变量才会被分配空间,每个实例对象都有自己的一份实例变量。
    • 只能通过实例对象来访问实例变量。

示例代码

下面是一个简单的 Java 程序,演示了静态变量和实例变量的区别:

java 复制代码
public class VariantTest {
    // 静态变量,属于类
    public static int staticVar = 0;

    // 实例变量,属于对象
    public int instanceVar = 0;

    // 构造方法
    public VariantTest() {
        staticVar++;
        instanceVar++;
        System.out.println("staticVar = " + staticVar + ", instanceVar = " + instanceVar);
    }

    public static void main(String[] args) {
        // 创建第一个对象
        VariantTest obj1 = new VariantTest();
        // 创建第二个对象
        VariantTest obj2 = new VariantTest();
        // 创建第三个对象
        VariantTest obj3 = new VariantTest();
    }
}

程序输出

运行上述代码,输出结果如下:

java 复制代码
staticVar = 1, instanceVar = 1
staticVar = 2, instanceVar = 1
staticVar = 3, instanceVar = 1

分析

  1. 静态变量 staticVar

    • 每次创建一个新对象时,staticVar 都会自增 1。
    • 因为 staticVar 是静态变量,属于类本身,所以无论创建多少个实例对象,它在内存中只有一个副本。
    • 结果是,staticVar 的值会随着每次创建对象而增加。
  2. 实例变量 instanceVar

    • 每次创建一个新对象时,instanceVar 都会自增 1。
    • 因为 instanceVar 是实例变量,属于每个实例对象,所以每个对象都有自己的 instanceVar 副本。
    • 结果是,每个对象的 instanceVar 都是独立的,不会相互影响。

结论

  • 静态变量:共享给所有对象,属于类本身,生命周期与类相同。
  • 实例变量:独立于每个对象,属于实例对象,生命周期与实例对象相同。
相关推荐
czhc11400756637 分钟前
C# 1120抽象类 static
java·开发语言·c#
whltaoin13 分钟前
【 Java微服务 】Spring Cloud Alibaba :Nacos 注册中心与配置中心全攻略(含服务发现、负载均衡与动态配置)
java·微服务·nacos·springcloud·注册中心·配置中心
你不是我我15 分钟前
【Java 开发日记】有了解过 SpringBoot 的参数配置吗?
java·开发语言·spring boot
稚辉君.MCA_P8_Java23 分钟前
Gemini永久会员 Java HotSpot 虚拟机(JVM)的优点
java·jvm·后端
ivanfor66625 分钟前
多租户架构的三级权限体系:设计逻辑与精准控制实现
java·开发语言·数据库
讨厌下雨的天空38 分钟前
Linux信号量
java·开发语言
♡喜欢做梦2 小时前
MyBatis XML 配置文件:从配置规范到 CRUD 开发实践
xml·java·java-ee·mybatis
爱吃烤鸡翅的酸菜鱼2 小时前
Spring Boot 实现 WebSocket 实时通信:从原理到生产级实战
java·开发语言·spring boot·后端·websocket·spring
J不A秃V头A2 小时前
Maven的分发管理与依赖拉取
java·maven
一只会写代码的猫5 小时前
面向高性能计算与网络服务的C++微内核架构设计与多线程优化实践探索与经验分享
java·开发语言·jvm