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

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

语法定义上的区别:
  • 静态变量 :在声明变量时使用 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 都是独立的,不会相互影响。

结论

  • 静态变量:共享给所有对象,属于类本身,生命周期与类相同。
  • 实例变量:独立于每个对象,属于实例对象,生命周期与实例对象相同。
相关推荐
古法老登瞎折腾7 小时前
大数据智能运维实战(十一):运维 MCP 的工程化——权限、限流、审计与错误处理
java·大数据·运维·spring ai·mcp
智能运维指南8 小时前
研制过程“两张皮“怎么破:研制一体化支撑平台的定位、能力边界与落地前提
java·前端·人工智能·嘉为蓝鲸
yz_aiks9 小时前
Spring AI 2.1 ChatMemory 已过时用什么替代:迁移到 Session Memory 实战(JDBC 存储与会话压缩)
java·spring boot·大模型·ai agent·spring ai
金銀銅鐵9 小时前
[Java] 用 GUI 展示 EnumMap 增删键值对时的内部变化
java·后端·ai编程
学长毕设9 小时前
基于SpringBoot的上门洗车服务系统设计与实现
java·spring boot·后端
jason成都9 小时前
RTKLIB-Java 多基线联合RTK:FIX率从0%到91.5%的三层根因修复
java·gnss·rtklib·rtklib_java
鱼宵9 小时前
Stream 终端操作一次讲透:collect、count、reduce 怎么选
java·stream·终端操作
白山编程大哥10 小时前
Java 后端如何优雅地把 List 集合返回给前端
java·前端·list
Linux运维技术栈10 小时前
CVE-2026-91403 高危漏洞修复:Rocky Linux 9 多版本 JDK 环境清理实操
java·linux·运维
On The Road :10 小时前
Java 多线程详解:从入门到线程安全
java·python·安全