class关键字:这是Java语言中的一个关键字,用来定义类。Class类:这是Java API中的一个类,位于java.lang包下,它是一个“类的类”(Class of classes),用来描述类和接口在运行时的状态信息。
class(小写) 是你在写代码时使用的工具,用来创建一个自定义的类型。Class(大写) 是程序在运行时存在的对象,它代表了你用class关键字创建的那个类型。
下面我们来详细解释这两者的区别、联系以及各自的用途。

class 关键字 - 创建蓝图
class 是Java中最基础、最重要的关键字之一,它是一个编译时的概念,是程序员用来构建代码结构的工具。
作用:
class 关键字用于定义一个类,类是创建对象的模板或蓝图,它定义了对象将拥有的属性(字段/成员变量)和行为(方法)。
示例:
下面我们用 class 关键字创建一个 Person 类,这个 Person 类就是一个蓝图,用来描述“人”这个概念应该有什么属性和功能。
// 使用 class 关键字定义一个名为 Person 的类
public class Person {
// 1. 字段:描述对象的属性
private String name;
private int age;
// 2. 构造方法:用于创建和初始化对象
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// 3. 方法:描述对象的行为
public void sayHello() {
System.out.println("Hello, my name is " + this.name + ", and I am " + this.age + " years old.");
}
// Getter 方法
public String getName() {
return name;
}
}
class 关键字:

- 类型:Java 语言关键字。
- 用途:定义类、接口(虽然用
interface关键字,但底层逻辑类似)、枚举等。 - 时机:在编译时使用,是源代码的一部分。
- 本质:一个模板,用于在运行时创建实例(对象)。
Class 类 - 运行时的“身份证”
Class 类是一个特殊的类,它的对象只能由Java虚拟机(JVM)自动创建,每当一个类被加载到内存中时,JVM就会自动为这个类创建一个对应的 Class 对象。
作用:
Class 对象是反射机制的入口,它包含了关于该类的完整信息,
- 类的名称 (
getName()) - 父类 (
getSuperclass()) - 实现的接口 (
getInterfaces()) - 所有的字段 (
getFields(),getDeclaredFields()) - 所有的方法 (
getMethods(),getDeclaredMethods()) - 构造方法 (
getConstructors(),getDeclaredConstructors()) - 注解信息 (
getAnnotations()) - 等等...
如何获取 Class 对象?
有三种主要方式:

使用 .class 语法(最推荐)
这种方式最简单、最安全,在编译时就能检查类型。
// 获取 Person 类对应的 Class 对象 Class<?> personClass = Person.class;
使用对象的 getClass() 方法
当你已经有一个类的实例对象时,可以通过调用它的 getClass() 方法来获取其 Class 对象。
Person person = new Person("Alice", 30);
Class<?> personClass = person.getClass();
使用 Class.forName() 方法(字符串形式)
当你只知道类的全限定名(从配置文件或数据库中读取)时,可以使用这种方式。注意:如果类名错误或类加载失败,会抛出 ClassNotFoundException。
try {
Class<?> personClass = Class.forName("com.example.Person"); // 假设 Person 类在这个包下
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
使用 Class 对象进行反射操作:
一旦你获得了 Class 对象,你就可以在运行时动态地操作这个类。
import java.lang.reflect.Method;
public class ReflectionExample {
public static void main(String[] args) {
try {
// 1. 获取 Class 对象
Class<?> personClass = Class.forName("Person"); // 确保 Person 类在 classpath 中
// 2. 创建实例 (相当于调用 new Person())
Object personInstance = personClass.getConstructor(String.class, int.class).newInstance("Bob", 25);
// 3. 获取 sayHello 方法
Method sayHelloMethod = personClass.getMethod("sayHello");
// 4. 调用方法 (相当于 personInstance.sayHello())
sayHelloMethod.invoke(personInstance);
// 5. 获取并访问字段
// Field nameField = personClass.getDeclaredField("name"); // 获取声明的字段(包括private)
// nameField.setAccessible(true); // 允许访问私有字段
// String name = (String) nameField.get(personInstance);
// System.out.println("Retrieved name: " + name);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Class 类:
- 类型:
java.lang包下的一个类。 - 用途:在运行时提供类的信息,是实现反射的基础。
- 时机:在运行时存在,当一个类被加载时由JVM创建。
- 本质:一个代表“类”这个概念的对象,是类的“元数据”或“身份证”。
总结与对比
| 特性 | class 关键字 |
Class 类 |
|---|---|---|
| 本质 | Java语言的关键字,一个编译时指令 | Java API中的一个类,一个运行时对象 |
| 角色 | 创建者/设计师,用于定义类的蓝图 | 描述者/元数据,用于描述类的信息 |
| 使用场景 | 定义类、接口、枚举等 | 反射、框架开发(如Spring)、动态代理、注解处理等 |
| 存在时机 | 编译时,存在于源代码中 | 运行时,存在于JVM内存中 |
| 关系 | 用 class 关键字定义的 Person,在运行时会有一个 Person.class 对象与之对应 |
Person.class 对象是 Class 类的一个实例 |
一个生动的比喻:
class关键字 就像是建筑设计师手中的画笔和图纸,设计师用它来设计一栋大楼(Person类),规定这栋楼要有几层(字段)、有什么功能(方法)。Class类 就像是这栋大楼的身份证和档案,这张身份证上记录了大楼的所有信息:设计师是谁、建于何时、有多少层、有哪些设施等,政府(JVM)根据设计师的图纸,在建成后为这栋大楼发放了这张身份证,你可以拿着这张身份证(Class对象)去查询大楼的各种信息,甚至在特殊情况下(反射)可以修改大楼内部的结构。
希望这个解释能帮助你彻底理解Java中 class 和 Class 的区别与联系!
