Photo by Lorem Ipsum
551 words
3 minutes
Java SE 系列(八):反射机制核心
Java SE 教程
Posts in this series (10)AI 智能总结
Java SE 8 反射机制核心
反射是 Java 框架底层核心原理,允许程序在运行时获取类信息、动态创建对象、调用方法、操作属性,突破编译期固定代码限制,Spring、MyBatis 底层均大量依赖反射。
一、Class 核心对象
Class 是所有类的字节码对象,反射的入口,一个类在运行中只会存在一个 Class 实例。
三种获取 Class 对象的常用方式:
// 1. 类名.classClass<User> clazz1 = User.class;// 2. 对象.getClass()User user = new User();Class<? extends User> clazz2 = user.getClass();// 3. 全类名反射获取(最常用)Class<?> clazz3 = Class.forName("com.demo.User");二、反射获取类结构信息
通过 Class 对象,可动态提取构造器、成员方法、成员变量,无视权限修饰符。
1. 获取构造器并创建对象
可获取私有构造器,突破 new 关键字限制实现动态实例化。
Class<User> clazz = User.class;// 获取无参构造User user = clazz.newInstance();// 获取有参构造并创建对象Constructor<User> constructor = clazz.getDeclaredConstructor(String.class, int.class);constructor.setAccessible(true); // 暴力破解私有构造User u = constructor.newInstance("张三", 20);2. 获取并调用成员方法
支持调用私有、公有任意方法,实现动态方法执行。
// 获取指定参数方法Method method = clazz.getDeclaredMethod("say", String.class);method.setAccessible(true);// 执行方法:对象、方法参数method.invoke(u, "反射调用方法");3. 获取并操作成员属性
动态读取、修改对象属性值,无视 private 权限。
Field field = clazz.getDeclaredField("name");field.setAccessible(true);// 修改属性field.set(u, "李四");// 获取属性值System.out.println(field.get(u));三、反射动态操作核心特点
动态性:运行时动态加载类、创建对象、执行逻辑,适配框架通用化设计。
权限突破:setAccessible(true) 可访问私有资源。
通用性强:无需提前 new 对象,通过全类名即可操作任意类。
核心总结
Class 对象是反射唯一入口,贯穿所有反射操作。
反射核心能力:获取构造、获取方法、获取属性、动态调用。
setAccessible(true) 暴力破解权限,是反射操作私有资源的关键。
反射牺牲少量性能,换取代码通用性与灵活性,是框架底层基石。
Java SE 系列(八):反射机制核心
https://fuwari.vercel.app/posts/java-se-series/java-se-08-reflection/