java反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的法的功能称为java语言的反射机制。
个人理解:Java支持在运行过程中通过对class文件的操作去获取任意一个类的属性和方法,即只要知道完整类名或获得class对象,即可操作其对应的属性和方法。
有三种方法可以得到class对象
- Class.forName("完整类名")
- 对象.getClass()
- 类型.class
通过class对象可实现以下操作:
实例化对象
调用newInstance()方法可实例化一个class对应的类对象,但是需保证该类有无参构造方法
获得Method对象
Method可以操作方法
调用getMethod(String name, Class<?>... parameterTypes)方法可获得对应的Method对象。
该方法参数为name:方法名 parameterTypes:方法的参数的class对象
Method对象可使用invoke方法直接调用---这种方法可以无视对象,直接使用对象的方法,类似于静态函数的使用。
Method对象还可以使用getAnnotation(Class<T> annotationClass)方法,获取方法的注解。该方法可用于AOP编程,通过反射获取切入点的注解信息以作对应通知
获得Field对象
Field可以操作属性
调用getFields()方法可获得对应类的Field对象列表(public 属性)。
调用getDeclaredFields()方法可获得对应类的所有Field对象列表。
调用getField(String name)可获得对应类的对应名称的Field(public 属性)。
getDeclaredField()同上
调用set(Object obj, Object value)可将obj对象的对应field属性改为value
例子:String str = new String("big"); Field field = str.getClass().getDeclaredField("value"); field.setAccessible(true); field.set(str,"small");
上例可将str的值从big改为small,而非修改str引用的指向
...待补充
参考文章:https://blog.csdn.net/qq_40408443/article/details/123206594?spm=1001.2014.3001.5506
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)