Java中创建对象必须先定义类再用new实例化;类是抽象模板,对象是具体实例,new在堆中分配内存并调用构造器,变量存储的是对象地址。

从零开始理解 Java 的类与对象,关键不是死记语法,而是建立“现实映射”的直觉——把代码看成对真实世界的建模。下面用最贴近初学者认知的方式讲清楚创建过程。
先搞懂类和对象到底是什么
类不是对象,它是一张设计图、一个模板、一种类型定义;对象才是按图建造出来的具体东西。
- 比如 Car 是一个类:它描述车有颜色、品牌、能启动、能刹车;但它本身不是某辆真实的车
- 而 new Car() 创建出来的那一个实例,比如“我停在楼下的那辆蓝色特斯拉”,才是对象——它有确定的颜色值、确定的品牌名、能被你真正调用
start()
类是抽象的,对象是具体的;类定义“能有什么”,对象体现“实际是什么”。
创建对象的两步不能跳
Java 中创建一个可用的对象,必须完成两个动作,缺一不可:
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
定义类:用
class 类名 { ... }写出结构,包括属性(如String name)和方法(如void sayHello()) -
用 new 实例化:在 main 或其他方法里写
类名 对象名 = new 类名();,这一步才会在内存中分配空间、触发构造器、生成真正的对象
只定义类不 new,就像画好了房子图纸但没盖房;只写 new Car() 却没定义 Car 类,编译直接报错——因为 Java 不知道“Car”长什么样。
new 到底做了什么(内存视角)
执行 Student s = new Student("张三", 18); 时,JVM 实际做了三件事:
- 在堆内存中开辟一块空间,存这个学生的具体数据(姓名、年龄等)
- 调用 Student 类的构造方法,把 "张三" 和 18 填进对应属性
- 把这块内存的地址赋给变量
s(s本身存在栈里,它只是个“指针”)
所以 s 不是对象本身,而是通往对象的“门牌号”。你可以再写 Student t = s;,这时 t 和 s 指向同一块堆内存——改 s.name,t.name 也会变。
动手写一个最小可运行例子
别抄大段代码,先跑通这个 10 行以内的真实例子:
class Dog {
String name;
void bark() { System.out.println(name + "汪!"); }
}
public class Main {
public static void main(String[] args) {
Dog d = new Dog();
d.name = "旺财";
d.bark(); // 输出:旺财汪!
}
}
做完三件事就懂了:
① Dog 是类(空模板)→ ② new Dog() 变成活对象 → ③ 给 name 赋值、调 bark() 就是在操作这个具体对象。

















