类是模板,定义结构和行为但不存数据;对象是new创建的实体,独占堆内存并保存具体值。类如图纸,对象才是可操作的实例,属性和非静态方法必须通过对象调用。

类是模板,对象是按模板造出来的具体东西。写代码时,类只定义“有什么”和“能干什么”,不存数据;对象才真正占内存、有值、能干活。
类是图纸,不是房子
类就像建筑图纸:它说明一个“人”该有 name、age,该会 introduce(),但图纸本身不能住人,也不保存“张三”或“25岁”这些具体信息。Java 编译后,类的结构(方法字节码、字段名、修饰符等)存在元空间,不占堆内存。你写 public class Person { String name; },此时没有任何 name 被赋值,也没有任何 Person 存在。
对象是 new 出来的实体,每个都有自己的内存
执行 Person p1 = new Person(); 时,JVM 才在堆里划出一块地,给 p1 分配独立空间——name 在这里才有地址、才能存“李四”,age 才能存 28。再写 Person p2 = new Person();,又是一块新内存,p1 和 p2 的 name 互不影响。栈里的 p1、p2 只是“地址标签”,指向各自那块堆内存。
属性属于对象,不属于类
初学者常误写 Person.name = "王五";,这会报错,因为 name 是实例变量,没对象就无处安放。正确做法是先有对象,再赋值:
- p1.name = "王五";
- p2.name = "赵六";
同理,调用方法也必须通过对象:p1.introduce();,而不是 Person.introduce();(除非是 static 方法)。
类决定共性,对象体现个性
所有 Person 对象共享同一套方法逻辑(比如 introduce() 总是打印“我叫…今年…岁”),但每个对象的属性值各不相同。这种分离让代码可复用又可定制:改一次 introduce(),所有 Person 对象的行为都更新;而改 p1.name,完全不影响 p2。这也是封装和面向对象设计的起点。
立即学习“Java免费学习笔记(深入)”;


















