type
status
date
slug
summary
tags
category
icon
password
URL
文章来源说明
概念
反射:将类的各个组成部分封装为其他对象,这就是反射机制。
好处:
1. 可以在程序运行过程中,操作这些对象。
2. 可以解耦,提高程序的可扩展性。

获取class对象方式
- Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
多用于配置文件,将类名定义在配置文件中。读取文件,加载类
- 类名.class:通过类名的属性class获取
多用于参数的传递
- 对象.getClass():getClass()方法在Object类中定义着。
多用于对象的获取字节码的方式
结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
Class对象功能
获取成员变量
- Field[] getFields() :获取所有public修饰的成员变量
- Field getField(String name) 获取指定名称的 public修饰的成员变量
- Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符
- Field getDeclaredField(String name)
Field:成员变量
1. 设置值 void set(Object obj, Object value)
2. 获取值 get(Object obj)
3. 忽略访问权限修饰符的安全检查(暴力反射) setAccessible(true)
获取构造方法
- Constructor<?>[] getConstructors()
- Constructor<T> getConstructor(Class<?>... parameterTypes)
- Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
- Constructor<?>[] getDeclaredConstructors()
Constructor:构造方法
创建对象:T newInstance(Object... initargs)
如果使用空参数构造方法创建对象,操作可以简化:Class对象的newInstance方法
示例:
获取成员方法
- Method[] getMethods() :获取类里面所有的public方法,包括父类里面的public方法
- Method getMethod(String name, 类<?>... parameterTypes)
- Method[] getDeclaredMethods() :获取类里面声明的所有的方法,不包括父类的方法
- Method getDeclaredMethod(String name, 类<?>... parameterTypes)
Method:方法对象
执行方法:Object invoke(Object obj, Object... args)
获取方法名称:String getName
解析注解
在程序使用(解析)注解:获取注解中定义的属性值
- 获取注解定义的位置的对象 (Class,Method,Field)
- 判断注解是否存在
- isAnnotationPresent(Class)
- 获取指定的注解
- getAnnotation(Class)
- 调用注解中的抽象方法获取配置的属性值
致谢:
有关Notion安装或者使用上的问题,欢迎您在底部评论区留言,一起交流~
- 作者:卷神
- 链接:https://blog.952712.xyz/article/f8273935-a0ef-4220-9019-a036d8071b30
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。




