第二篇:Java反射机制入门
·
第二篇: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, 李四
}
}
更多推荐



所有评论(0)