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

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

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

结论

  • 静态变量:共享给所有对象,属于类本身,生命周期与类相同。
  • 实例变量:独立于每个对象,属于实例对象,生命周期与实例对象相同。
相关推荐
小猪绝不放弃.9 分钟前
‌Java SE和Java EE的区别对比及应用场景解析
java-ee
大G的笔记本11 分钟前
用 Redis 的 List 存储库存队列,并通过 LPOP 原子性出队来保证并发安全案例
java·数据库·redis·缓存
太过平凡的小蚂蚁30 分钟前
适配器模式:让不兼容的接口协同工作
java·前端·javascript
ljh_learn_from_base35 分钟前
【spring boot 使用apache poi 生成和处理word 文档】
java·spring boot·word·apache
数字芯片实验室1 小时前
流片可以失败,但人心的账本不能亏空
java·开发语言
华仔啊1 小时前
为什么你的 @Transactional 不生效?一文搞懂 Spring 事务机制
java·后端
Lacrimosa&L1 小时前
OS_3 Memory、4 File、5 IO
java
爱学的小码1 小时前
JavaEE——多线程1(超详细版)
java·java-ee
tuokuac1 小时前
依赖spring-cloud-starter-gateway与spring-cloud-gateway-dependencies的区别
java·gateway
seabirdssss2 小时前
JDK 11 环境正确,端口未被占用,但是运行 Tomcat 11 仍然闪退
java·开发语言·tomcat