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

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

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

结论

  • 静态变量:共享给所有对象,属于类本身,生命周期与类相同。
  • 实例变量:独立于每个对象,属于实例对象,生命周期与实例对象相同。
相关推荐
Boilermaker19925 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维5 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_995 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子5 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34166 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体16 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy18096 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18097 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假7 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
资生算法程序员_畅想家_剑魔8 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin