在 Java 编程中,类(Class) 与 对象(Object) 是面向对象编程(OOP)的核心概念。它们帮助开发者将现实世界中的实体抽象为程序结构,并以模块化、可维护的方式组织代码。
理解类与对象的基本定义及其关系
掌握如何在 Java 中定义类和创建对象
了解对象的三大特性:状态、行为与身份
熟悉 Java 中创建对象的四种方式
认识匿名对象与多引用机制的应用场景
类是创建对象的蓝图或模板。它定义了一组具有相同属性(字段)和行为(方法)的对象应具备的结构。

将相关的字段(变量)和方法封装在一个单元中
本身不占用内存(字段的内存仅在对象实例化时分配)
可包含:字段、方法、构造函数、内部类、接口等
定义一个 Student 类
class Student {
int id;
String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
}
public class Main {
public static void main(String[] args) {
Student s1 = new Student(10, "Alice");
System.out.println(s1.id); // 输出:10
System.out.println(s1.name); // 输出:Alice
}
}说明:
Student是类,s1是该类的一个具体对象(实例)。
对象是类的具体实例,代表现实世界中的某个实体(如一只狗、一个用户、一个商品)。每个对象具有三个核心特征:

对象存储在 堆内存(Heap) 中,而对象的引用变量存储在 栈内存(Stack) 中。
创建对象的过程称为 实例化,使用 new 关键字完成。

Dog tuffy; // 仅声明引用,tuffy == nulltuffy = new Dog("Tuffy", "Papillon", 5, "White");new 操作符:分配内存 + 调用构造函数
Dog 类
public class Dog {
String name;
String breed;
int age;
String color;
public Dog(String name, String breed, int age, String color) {
this.name = name;
this.breed = breed;
this.age = age;
this.color = color;
}
public String getName() { return name; }
public String getBreed() { return breed; }
public int getAge() { return age; }
public String getColor() { return color; }
@Override
public String toString() {
return "Name is: " + name +
"\nBreed, age and color are: " +
breed + " " + age + " " + color;
}
public static void main(String[] args) {
Dog tuffy = new Dog("Tuffy", "Papillon", 5, "White");
System.out.println(tuffy);
}
}输出:
Name is: Tuffy
Breed, age and color are: Papillon 5 White注意:如果类中未显式定义构造函数,Java 会提供一个默认无参构造函数。
静态方式
有时我们使用静态方法来设置类的状态(尤其适用于工具类或单例模式):
public class Software {
static String name;
static float price;
static void set(String n, float p) {
name = n;
price = p;
}
static void get() {
System.out.println("Software name is: " + name);
System.out.println("Software price is: " + price);
}
public static void main(String[] args) {
Software.set("Visual Studio", 0.0f);
Software.get();
}
}输出:
Software name is: Visual Studio
Software price is: 0.0此方式适用于全局共享状态,但不推荐用于常规对象建模,因为它破坏了封装性。
new 关键字标准方式
Test t = new Test();Class<?> c = Class.forName("Student");
Student s = (Student) c.getDeclaredConstructor().newInstance();clone()class Tool implements Cloneable {
String name = "CodeMaster";
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
try {
Tool t1 = new Tool();
Tool t2 = (Tool) t1.clone();
System.out.println(t2.name); // 输出:CodeMaster
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}详情请参考《Java 序列化与反序列化》
// 序列化
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("student.ser"))) {
out.writeObject(new Student("Alice"));
}
// 反序列化
try (ObjectInputStream in = new ObjectInputStream(new FileInputStream("student.ser"))) {
Student s = (Student) in.readObject();
System.out.println(s); // 输出:Student: Alice
}所有被序列化的类必须实现
Serializable接口。
Java 允许同一个引用变量在不同时间指向不同的对象:
Test test = new Test(); // 第一次创建
test = new Test(); // 引用指向新对象,原对象变为垃圾回收候选在继承中的典型用法
Animal obj = new Dog(); // 多态:父类引用指向子类对象
obj = new Cat(); // 同一引用可指向另一子类当对象不再被任何引用指向时,会被 JVM 的垃圾回收器(GC)回收。
匿名对象是没有引用变量的对象,通常用于一次性操作。
特点
创建后立即使用,无法再次访问
节省内存(适合短生命周期任务)
常用于事件处理、测试调用等场景
示例
// 直接调用方法,不保存引用
new Dog("Max", "Labrador", 3, "Black").getName();应用场景
GUI 编程中的按钮点击事件
单次验证或计算
单元测试中的临时对象
类是模板,对象是实例
对象具有 状态、行为、身份 三大特征
使用 new 创建对象是最常见方式
Java 支持 4 种对象创建机制:new、反射、克隆、反序列化
匿名对象适用于一次性操作,提升代码简洁性
引用变量可动态指向不同对象,支持多态与资源复用
为什么说“类不占用内存,而对象占用内存”?请结合 JVM 内存模型解释。
在什么情况下你会选择使用 clone() 而不是 new 来创建对象?
匿名对象是否可以调用多个方法?如果可以,如何实现?如果不可以,为什么?