1.什么是反射
反射是框架设计的灵魂。在运行时把类中成员抽取为其它类对象的过程
(框架:由别人设计好的半成品,使用时填入自己的业务代码就好,提高效率)
还记得怎么运行的吗 ?
源码----javac编译----->字节码-----ClassLoader类加载器----->jvm内存---->运行
当加载到jvm上字节码文件是以何种形式存在的?
2.获取反射Class
从上可知,任何一个字节码都会被类加载器加载到JVM内存中,以Class对象形式存在
(一个字节码只会被加载一次)
获取Class对象的方法有三种
3.通过反射类获取对象
通过Class类调用new Instance() 方法
(注:这个方法在jdk17版本已经过失了,但不影响使用)
4.获取反射类的属性成员对象
字节码中加载后的属性成员会以Filed类的形式存放
getDeclaredField(属性名) 根据名字获取本类中的属性对象
getDeclaredFields() 获取本类中所有的属性对象
getField(属性名) 根据名字获取本类以及父类中public属性对象
getFields() 获取本类以及父类中public属性对象
4.2.常用方法
get(类对象) set(类对象,值)
setAccessible(true): 设置允许访问私有属性
getAnnotation(注解.class):获取属性上的注解对象
5.获取方法类对象
getDeclaredMethod(方法名) 根据名字获取本类中的方法对象
getDeclaredMethods() 获取本类中所有的方法对象
getMethod(方法名) 根据名字获取本类以及父类中public方法对象
getMethods() 获取本类以及父类中public方法对象
无参可以不写,有参需要跟上参数类
5.2常用方法
invoke(对象,参数....): 执行该方法体。
6.获取构造函数类对象
getDeclaredConstructor(参数类型) 根据参数类型获取本类中的构造方法对象
getDeclaredConstructors() 获取本类中所有的构造方法对象
getConstructor(参数类型) 根据参数类型获取本类中public构造方法对象
getConstructors() 获取本类中public构造方法对象