资讯中心

java实例变量和类变量

📅 2026/7/23 10:02:39
java实例变量和类变量
Java 实例变量 vs 类变量静态变量 static完整对比对应 Python Java实例变量 Python 实例变量 Java类变量static 修饰 Python 类变量一、基础定义1. 类变量静态变量 static variable被static关键字修饰属于类本身不属于任何对象 全类所有对象共享同一份数据。java运行class Student { // 类变量static 修饰 public static String school 第一中学; }2. 实例变量成员变量 non-static无static定义在类中方法外 每 new 一个对象就会创建一份独立变量归当前实例私有。java运行class Student { // 实例变量 public String name; public int age; }二、核心区别全方位对比1. 内存分配 存储位置类变量 (static)加载类的时候字节码进 JVM就分配内存无需创建对象就存在存储在方法区静态区整个程序中只有一份内存所有对象共用实例变量只有执行new Student()创建对象时才会在堆内存分配空间每个实例单独一份内存互不干扰不创建对象内存不会分配2. 访问方式重点类变量 2 种访问方式推荐类名直接访问java运行// 推荐类名.静态变量 Student.school 实验中学; // 也可以对象访问但不推荐 Student s1 new Student(); System.out.println(s1.school);实例变量只能通过对象访问java运行Student s1 new Student(); s1.name 小明; // Student.name 直接报错类不能调用实例变量3. 生命周期类变量类加载时创建类卸载 / 程序结束才销毁生命周期最长。 哪怕所有对象都被回收静态变量依旧存在。实例变量对象创建时初始化对象被 GC 垃圾回收后变量一起释放销毁。4. 继承中的表现和 Python 逻辑高度相似1静态变量类变量子类可以直接继承、访问父类静态变量子类定义同名静态变量隐藏隐藏 Hiding父子互相独立修改互不影响修改父类静态变量所有未重写的子类都会同步变化java运行class Parent { public static int count 10; } class Son extends Parent{} Parent.count 99; System.out.println(Son.count); // 99 同步更新2实例变量不会自动继承子类想要使用父类实例变量依靠构造方法、super 调用每个父子实例的实例变量完全独立修改互不影响5. 方法内访问规则① 实例方法普通方法无 static✅ 可以访问实例变量 静态类变量java运行public void test(){ System.out.println(name); // 实例变量 System.out.println(school); // 静态变量 }② 静态方法static 方法✅ 只能访问静态类变量❌不能直接访问实例变量静态方法没有 this没有当前对象java运行public static void staticTest(){ System.out.println(school); // 可行 // System.out.println(name); 报错 }6. 赋值修改坑同 Python 遮蔽问题Java 中用对象修改静态变量不会新建变量和 Python 不一样java运行Student s1 new Student(); s1.school 二中; // 本质还是修改类上的静态变量所有对象全部生效Pythonobj.类变量值会新建实例变量遮蔽 Java对象修改 static 变量修改的就是类变量本身无遮蔽三、命名规范Java 开发规约实例变量、普通静态变量小驼峰camelCaseuserName、userAge、totalNum静态常量static final 固定不变全大写下划线分隔java运行public static final int MAX_AGE 120; public static final String DEFAULT_HOST 127.0.0.1;私有变量加private提供 get/set 封装四、使用场景用静态变量类变量适合全局共享数据网站在线人数、系统配置、统一前缀常量static final固定参数用实例变量适合每个对象独有属性用户名、年龄、地址、头像等五、简明对比表格表格对比项类变量 (static)实例变量修饰符带 static无 static归属类单个对象内存份数全局一份每个对象一份创建时机类加载时new 对象时访问方式类名。变量 / 对象。变量仅对象。变量静态方法中可访问不可访问共享性所有实例共享相互独立生命周期程序全程对象存活期间