news 2026/6/16 4:40:49

Java 反射机制完整入门详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java 反射机制完整入门详解

一、什么是 Java 反射机制

Java 反射机制:在程序运行阶段,动态获取类的完整结构(类名、属性、方法、构造器),并可以实例化对象、调用任意方法、读写成员变量,这种动态操作类信息的能力就叫反射。

正常编码是new 类名()正向创建对象,编译期就确定类型;反射是运行期才解析类结构,实现解耦、框架底层核心支撑。

二、反射核心:Class 类对象

每一个 Java 类加载后,JVM 都会生成唯一对应的Class对象,这个对象存储了当前类全部元信息,反射所有操作都基于该Class对象展开。

获取 Class 对象 3 种方式:

// 方式1:类名.class(编译期获取) Class<User> clazz1 = User.class; // 方式2:对象.getClass()(已有实例对象) User user = new User(); Class<? extends User> clazz2 = user.getClass(); // 方式3:Class.forName("全类名")(最常用,框架配置文件加载类) Class<?> clazz3 = Class.forName("com.demo.User");

三、完整实战代码

1. 实体类准备

public class User { // 私有成员变量 private String username; public Integer age; // 无参构造 public User() {} // 有参构造 public User(String username, Integer age) { this.username = username; this.age = age; } // 私有方法 private void showPrivateMsg(String msg) { System.out.println("私有方法执行:" + msg); } // 公共方法 public void sayHello() { System.out.println("Hello 反射"); } // getter/setter public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } }

2. 反射全套操作示例

import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectDemo { public static void main(String[] args) throws Exception { // 1. 获取Class对象 Class<?> clazz = Class.forName("User"); // 2. 反射调用构造器,实例化对象 Constructor<?> con = clazz.getDeclaredConstructor(String.class, Integer.class); User user = (User) con.newInstance("张三", 20); System.out.println("实例化对象:" + user.getUsername()); // 3. 反射操作私有成员变量 Field nameField = clazz.getDeclaredField("username"); nameField.setAccessible(true); // 暴力反射,破除private权限 nameField.set(user, "李四"); System.out.println("修改后用户名:" + nameField.get(user)); // 4. 反射调用私有方法 Method privateMethod = clazz.getDeclaredMethod("showPrivateMsg", String.class); privateMethod.setAccessible(true); privateMethod.invoke(user, "反射可以执行私有方法"); // 5. 反射调用公共方法 Method publicMethod = clazz.getMethod("sayHello"); publicMethod.invoke(user); } }

四、关键 API 说明

  1. 构造器getConstructor():获取 public 构造器getDeclaredConstructor():获取任意权限构造器,支持私有构造
  2. 成员变量 FieldgetField():仅获取 public 字段getDeclaredField():获取所有权限字段setAccessible(true):开启暴力反射,无视访问修饰符
  3. 方法 MethodgetMethod():获取 public 方法getDeclaredMethod():获取任意权限方法invoke(对象, 参数):执行目标方法

五、反射优缺点

优点

  1. 极高灵活性:运行期动态创建对象、调用方法,框架必备;
  2. 解耦:配置文件写全类名即可加载类,无需硬编码导入类。

缺点

  1. 性能偏低:绕过编译期优化,动态解析类结构,执行速度慢;
  2. 破坏封装:暴力反射可以读写私有变量、执行私有方法,存在安全隐患;
  3. 代码可读性差,调试难度高于正向编码。

六、典型应用场景

  1. 主流框架底层:Spring IoC 容器、MyBatis、SpringMVC 全部依靠反射实现对象实例化、依赖注入;
  2. 通用工具类:序列化 / 反序列化、JSON 解析工具(FastJSON、Jackson);
  3. 插件化架构:动态加载外部 jar 包里的类,无需重启服务。

七、总结

  1. 反射本质:运行期操纵 Class 元数据,反向操作类的成员;
  2. setAccessible(true)是反射访问私有结构的关键;
  3. 日常业务开发极少手写反射,但所有主流框架底层都重度依赖反射,是 Java 进阶核心知识点。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/16 4:39:56

Cadence Allegro 16.6异形焊盘制作全攻略:从原理到实战避坑

1. 项目概述&#xff1a;从标准到定制的跨越在电子设计自动化&#xff08;EDA&#xff09;领域&#xff0c;Cadence Allegro 16.6 是进行高速、高密度PCB设计的行业标杆工具。对于很多硬件工程师和PCB Layout工程师来说&#xff0c;绘制标准的圆形、方形或椭圆形焊盘是家常便饭…

作者头像 李华
网站建设 2026/6/16 4:39:16

金融大模型落地能力评测:稳准可解释的工程化实践

1. 这份报告不是“排行榜”&#xff0c;而是金融大模型落地能力的压力测试最近朋友圈和行业群被一份《金融领域大模型年度评测报告》刷屏&#xff0c;标题里赫然出现“阶跃星辰/财跃星辰大模型表现优秀”——但如果你点开就急着找排名、抄榜单、比参数&#xff0c;那很可能从第…

作者头像 李华
网站建设 2026/6/16 4:33:52

SEAL-Math评测框架:解构大模型数学推理能力的结构化标尺

1. 项目概述&#xff1a;当“华裔天才少年”与“SEAL排行榜”撞上Claude 3 Opus的数学高光时刻最近刷到一条信息&#xff0c;说“27岁华裔天才少年首发SEAL大模型排行榜”&#xff0c;紧接着就看到“Claude 3 Opus数学封神”被反复提及。说实话&#xff0c;我第一反应不是点开看…

作者头像 李华
网站建设 2026/6/16 4:30:53

Hermes Agent实战:构建可进化的AI工作流操作系统

1. 项目概述&#xff1a;Hermes Agent不是又一个聊天框&#xff0c;而是一套可部署、可进化的AI工作流操作系统“Hermes Agent开发实战详解与精通”这个标题里藏着一个被严重低估的事实&#xff1a;它根本不是教你怎么调用一个API、写几行提示词的“轻量级工具课”&#xff0c;…

作者头像 李华
网站建设 2026/6/16 4:27:52

二维二分算法:从有序矩阵搜索到四叉树实战指南

1. 项目概述&#xff1a;从“二分”到“二维”的思维跃迁“二维二分”这个词&#xff0c;乍一听可能有点抽象&#xff0c;甚至带点学术味。但如果你在数据处理、图像分析、游戏开发或者算法优化的领域里摸爬滚打过&#xff0c;这个概念其实就藏在很多具体问题的背后。简单来说&…

作者头像 李华
网站建设 2026/6/16 4:26:07

逆变仿真全流程解析:从系统建模到电路级验证的工程实践

1. 项目概述&#xff1a;从“逆变”到“仿真”的工程实践“逆变仿真”这四个字&#xff0c;对于电力电子、新能源、工业控制等领域的工程师来说&#xff0c;是一个既熟悉又充满挑战的课题。它不像一个具体的产品名称那样直观&#xff0c;更像是一个贯穿于研发、测试、验证全周期…

作者头像 李华