Java基础 -- 反射
Java基础 -- 反射
1. 什么是反射?
官方定义:
Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within security restrictions. The API accommodates applications that need access to either the public members of a target object (based on its runtime class) or the members declared by a given class. It also allows programs to suppress default reflective access control.
反射让Java代码能够知道关于关于加载类的信息,包括变量,方法和构造器,而且反射让Java代码在安全限制内使用反射的变量、方法和构造器来对底层进行操作。该API可以满足需要访问目标对象的公共成员(基于其运行时的类)或特定类所声明的成员的应用程序。它还允许程序抑制默认的反射性访问控制。
一句话概括Java反射是什么:
通过对象看到类结构,再看到包,这就是反射
2. 反射能干什么?
引入反射之前,能对类进行的操作有:
- 创建类的对象;
- 通过对象,调用内部属性和方法
【注】在类的外部,不能通过类的对象调用内部私有结构
引入反射之后,能对类进行的操作有:
- 通过反射创建类的对象;
- 通过反射调用对象指定的属性和方法;
- 通过反射调用类的私有结构,如私有构造器、方法和属性
3. 反射的应用 -- 动态代理
3.1 代理模型
- 代理模式就是用代理对象代替对真实对象的访问,在不修改原对象的前提下,提供额外功能,扩展功能
- 大白话理解:
小美是一个女艺人,关于她的商务活动等都由经纪人小帅负责。比如小美现在正在参加一个活动,原定于活动完毕小美日程结束,可以回家休息;但是这时告诉经纪人活动之后还有一个酒会,这样在不打扰小美原有活动的前提下,给小美又安排了日程。
3.2 静态代理
- 静态代理:手动对目标对象的方法进行增强
- 缺点:
3.3 动态代理
-
动态代理:无需手动声明代理类,在运行过程中生成虚拟代理类,被ClassLoader加载;动态代理就是无论有几个接口,都是只需要一个代理类
-
实现步骤:
-
优点:
4. 参考资料
https://javaguide.cn/java/basis/proxy.html#_1-代理模式
https://www.cnblogs.com/bryan31/p/15266725.html
https://docs.oracle.com/javase/8/docs/technotes/guides/reflection/index.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧