类是抽象模板,不占堆内存;对象是具体实例,创建时在堆中分配独立内存。类定义共性属性与方法,对象拥有独立字段值并共享类中方法代码。

类是模板,对象是实例。类定义了“一类事物”的结构和行为(比如属性和方法),而对象是根据这个模板创建出来的具体个体(比如“张三”这个人、一辆具体的“宝马X5”)。没有类,就无法创建对象;没有对象,类就只是纸上蓝图,不占用内存。
类:抽象的设计图纸
类是抽象的、静态的,它不占内存空间(编译时存在,运行时不占堆内存)。它描述了所有同类对象共有的特征:
- 有哪些属性(字段)——比如String name、int age
- 能做什么操作(方法)——比如void speak()、void walk()
- 如何初始化(构造方法)——比如Person(String name, int age)
类本身不能直接使用功能,就像你不能用“汽车设计图”去开车。
对象:具体的运行实体
对象是动态的、实际存在的,创建时(用new)会分配内存(在堆中),每个对象有自己独立的一份属性值:
立即学习“Java免费学习笔记(深入)”;
- Person p1 = new Person("张三", 25);
- Person p2 = new Person("李四", 30);
此时p1和p2是两个不同对象:他们名字不同、年龄不同,但都具备speak()和walk()的能力——这些能力来自类,而数据属于各自对象。
类与对象的关系图示(文字简绘)
想象一个工厂流水线:
┌───────────────┐
│ Person类 │ ← 抽象模板(不占运行内存)
├───────────────┤
│ - name: String │
│ - age: int │
│ │
│ + speak() │
│ + walk() │
└───────────────┘
↓ new
┌─────────────────┐ ┌─────────────────┐
│ p1对象 │ │ p2对象 │
├─────────────────┤ ├─────────────────┤
│ name = "张三" │ │ name = "李四" │
│ age = 25 │ │ age = 30 │
│ [speak()代码复用] │ │ [speak()代码复用] │
└─────────────────┘ └─────────────────┘
↑内存中真实存在 ↑内存中另一个真实存在
关键区别一句话总结
类是类型(type),用于声明变量和创建对象;对象是值(value),是程序运行时真正参与操作的数据实体。你可以声明Person p;(只定义类型),但必须p = new Person(...);才真正诞生一个对象。
基本上就这些。不复杂,但容易忽略“类不占堆内存”和“方法共用、字段独立”这两个核心点。










