在 Java 学习中static 关键字修饰的变量、方法属于类本身而非单个对象。通过一个家族姓名的实战案例拆解静态变量、静态方法的核心特性掌握 static 的用法。一、案例需求说明我们有两个 Java 类FamilyPerson家庭成员类包含静态姓氏 surname所有家庭成员共享同一个姓氏和实例姓名 name每个成员独有的名字提供静态方法设置姓氏、普通方法设置名字。MainClass主程序类创建父亲、两个儿子三个对象通过代码实现统一修改家族姓氏、单独设置成员名字并打印验证效果。需要填充三处【代码】完成完整程序运行。二、完整代码实现1. FamilyPerson.java成员类无需修改这个类定义了家庭成员的属性和方法核心是static 修饰的 surnamepublic class FamilyPerson { // 静态变量所有FamilyPerson对象共享同一个姓氏 static String surname; // 实例变量每个对象独有的名字 String name; // 静态方法只能访问静态变量用于设置家族姓氏 public static void setSurname(String s){ surname s; } // 普通方法可以访问静态变量实例变量用于设置个人名字 public void setName(String s) { name s; } }2. MainClass.java主程序填充三处代码public class MainClass { public static void main(String args[]) { //【代码 1】用类名 FamilyPerson 访问 surname,并为 surname 赋值:李 FamilyPerson.surname 李; FamilyPerson father,sonOne,sonTwo; father new FamilyPerson(); sonOne new FamilyPerson(); sonTwo new FamilyPerson(); //【代码 2】father 调用 setName(String s),并向 s 传递向阳 father.setName(向阳); sonOne.setName(抗日); sonTwo.setName(抗战); // 第一次打印姓氏统一为李 System.out.println(父亲:father.surnamefather.name); System.out.println(大儿子:sonOne.surnamesonOne.name); System.out.println(二儿子:sonTwo.surnamesonTwo.name); //【代码 3】father 调用 setSurName(String s),并向 s 传递张 father.setSurname(张); // 第二次打印姓氏统一修改为张 System.out.println(父亲:father.surnamefather.name); System.out.println(大儿子:sonOne.surnamesonOne.name); System.out.println(二儿子:sonTwo.surnamesonOne.name); } }3. 程序运行结果父亲:李向阳 大儿子:李抗日 二儿子:李抗战 父亲:张向阳 大儿子:张抗日 二儿子:张抗战三、核心知识点深度拆解这道题的核心是Java 静态变量类变量和实例变量的区别也是 static 关键字最核心的考点。1. 静态变量static 变量vs 实例变量特性静态变量static String surname实例变量String name归属属于类本身不属于单个对象属于每个对象单独拥有内存存储方法区仅分配1 次内存堆区每个对象分配独立内存访问方式推荐类名。变量名兼容对象名。变量名只能对象名。变量名共享性所有对象共享同一个值每个对象值独立互不影响生命周期类加载时创建程序结束时销毁对象创建时创建对象销毁时销毁案例中的体现三个对象father/sonOne/sonTwo共享同一个surname修改一次所有对象的姓氏都会同步改变三个对象的name独立存储父亲是 向阳大儿子是 抗日互不干扰。2. 静态方法static 方法的规则静态方法只能直接访问静态变量 / 静态方法不能直接访问实例变量因为实例变量属于对象静态方法属于类类加载时对象还未创建访问方式推荐用类名调用也可以用对象名调用本质还是类的方法不推荐静态方法中不能使用this关键字this 代表当前对象静态方法不属于对象。案例中的体现setSurname()是静态方法只能修改静态变量surname代码 1 用类名.静态变量赋值标准写法代码 3 用对象名.静态方法赋值兼容写法不推荐。3. 代码填充的核心逻辑代码 1静态变量属于类必须用类名。变量名访问 →FamilyPerson.surname 李;代码 2setName()是实例方法必须用对象名。方法名调用 →father.setName(向阳);代码 3setSurname()是静态方法用对象名调用 →father.setSurname(张);4. 为什么修改姓氏后所有成员都变了这是静态变量最关键的特性共享性。当我们执行FamilyPerson.surname 李时内存中只存了一个 李当执行father.setSurname(张)时这个唯一的静态变量值被改为 张所有引用它的对象都会读取到最新值。这就像家族的族谱姓氏全家族共享一个修改后所有人的姓氏同步更新完美契合静态变量的设计初衷。四、static 变量 / 方法的使用场景共享数据比如项目中的全局配置、家族姓氏、公司名称、常量值等工具方法不需要创建对象就能调用的方法比如Arrays.sort()、Math.random()都是静态方法单例模式保证一个类只有一个对象核心就是静态变量。五、避坑指南不要用对象名访问静态变量 / 方法虽然语法不报错但违背设计逻辑可读性极差静态方法不能访问实例变量如果在setSurname()中修改name编译器会直接报错静态变量推荐直接用类名访问实例变量必须用对象名访问。总结静态变量类所有共享一份内存修改一处全局生效实例变量对象所有独立存储互不干扰访问规则静态资源用类名访问实例资源用对象名访问核心特性静态变量的共享性是解题和理解 static 的关键。