第二篇:Java反射机制入门

# Java反射机制入门:核心用法与应用
## 前言
反射是Java的核心特性之一,它允许程序在**运行时**获取任意类的信息,并能操作类的对象、方法和属性。几乎所有主流Java框架(Spring、MyBatis)都基于反射实现,是后端开发的必备知识。

## 一、核心概念
**反射**:在运行状态中,对于任意一个类,都能知道它的所有属性和方法;对于任意一个对象,都能调用它的任意方法和属性。这种动态获取信息和动态调用对象方法的功能,称为Java的反射机制。

## 二、常用核心API
反射的核心是`java.lang.Class`类,所有反射操作都从获取Class对象开始。

| 操作 | 常用方法 |
|------|----------|
| 获取Class对象 | `类名.class` / `对象.getClass()` / `Class.forName("全类名")` |
| 创建实例 | `clazz.newInstance()`(无参) / `constructor.newInstance(参数)` |
| 获取方法 | `getMethod()`(公共) / `getDeclaredMethod()`(所有) |
| 获取属性 | `getField()`(公共) / `getDeclaredField()`(所有) |
| 获取构造方法 | `getConstructor()` / `getDeclaredConstructor()` |

## 三、基础代码示例
```java
// 示例类
class User {
    private String name;
    public int age;

    public User() {}
    public User(String name) { this.name = name; }

    public void sayHello() {
        System.out.println("Hello, " + name);
    }

    private void privateMethod() {
        System.out.println("这是私有方法");
    }
}

// 反射操作演示
public class ReflectDemo {
    public static void main(String[] args) throws Exception {
        // 1. 获取Class对象
        Class<?> clazz = Class.forName("com.example.User");

        // 2. 创建实例
        Object user = clazz.getConstructor(String.class).newInstance("张三");

        // 3. 调用公共方法
        clazz.getMethod("sayHello").invoke(user); // 输出:Hello, 张三

        // 4. 调用私有方法(暴力反射)
        var privateMethod = clazz.getDeclaredMethod("privateMethod");
        privateMethod.setAccessible(true); // 突破访问权限
        privateMethod.invoke(user);

        // 5. 操作私有属性
        var nameField = clazz.getDeclaredField("name");
        nameField.setAccessible(true);
        nameField.set(user, "李四");
        clazz.getMethod("sayHello").invoke(user); // 输出:Hello, 李四
    }
}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐