反射注解知识点复习(第一次)
知识梳理
1、注解
1.1、基础常识
始于JDK1.5
可以使用在包、类、字段、方法、局部变量、方法参数等的前面
1.2、内置注解
-
@Override:用于重写超类的方法
java.lang.Override包下
-
@Deprecated:用于标记过时的方法、属性或类
java.lang.Deprecated包下
-
@SuppressWarnings():抑制警告信息。需要添加参数,一般为“all”、“unchecked”
java.lang.SuppressWarnings包下
1.3、自定义注解
java.lang.annotation包下
- @Target():被扫描的注解可以使用的地方,比如方法上、类上
- @Retention():表示生命周期。不同参数生命周期的排序SOURCE < CLASS < RUNTIME
- @Document:该注解将被包含在javadoc中
- @Inherited:说明子类可以继承父类中的该注解
2、反射
2.1、反射概述
Java是静态语言,但是反射使得Java成了准动态语言
反射式java被视为动态语言的关键,反射机制允许程序在执行期间借助Reflection API获取任何类的内部信息,并能直接操作任意对象的内部属性及方法
2.2、获取Class实例的三种方式
- 对象名.getClass()
- 类名.class ==> 该方法最安全,性能最优
- 类名.forName(“全类名”) ==> 需要抛出异常
2.3、类加载的过程
当程序主动使用某个类的时候,如果该类还没有加载到内存中,则系统就会通过一下的三个步骤对类进行初始化:
- 类的加载:进行数据转换,并创建一个Class对象
- 类的链接:将类的为禁止数据合并到JRE中
- 类的初始化:JVM负责对类进行初始化
类加载器的作用是把用类class装载进内存的。
自定义类加载器 ==> 系统加载器 ==> 扩展类加载器 ==> 根加载器(使用C++语言,获取为null)
双亲委派机制:双亲委派机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此,只有在父类加载器在自己的搜索范围内找不到指定类时,子类加载器才会尝试自己去加载。
2.4、获取类对应的结构
1、类名
.getName():获取全类名
.getSimpleName():获取简单类名
2、属性
.getFields():获取类的public属性
.getDeclaredFields():获取类的所有属性
.getField(“属性”):获取类的public里面的指定属性
.getDeclaredField(“属性”):获取类的所有属性里面的指定属性
3、方法
.getMethods():获取本类及父类的的public方法
.getDeclaredMethods():获取本类的全部方法
.getMethod(“方法名”,“参数”):获取本类及父类的的public方法里面指定的方法
.getDeclaredMethod(“方法名”,“参数”):获取本类的全部方法里面指定的方法
4、构造器
.getConstructors():获取本类的public构造方法
.getDeclaredConstructors():获取本类的全部构造方法
注意:获取带参构造时,需要添加对应参数类型的.class
5、注意
获取构造方法时:
构造器对象.newInstance(参数)
通过反射获取普通方法时:
方法.invoke(对象,“参数列表”)
通过反射获取private内容时:
对象.setAccessible(true)
对象.set(对象,“参数列表”)