什么是Java 反射?
就是正在运行,动态获取这个类的信息。
反射机制的作用?
1.反编译 .class 文件到 .java 文件
2.通过反射机制 访问对象的构造方法,方法,属性等。
如何通过反射获取类?
这里又三种方法,可以通过反射动态获取类。
第一种:
第二种:
第三种:
这三种有什么区别?
总结:第一种通过forName() 方法 执行静态块,不执行动态块
第二种通过.class 方法 不执行静态块和动态块
第三种:需要创建对象,静态块,动态块都会执行
注意:静态块 类只加载一次,如果已经加载则不会重复加载,动态块,每次new 对象都会执行。
效果如图:
第一种:
第二种:
第三种:
java反射创建对象?
如何创建对象?
通过实例化构造函数来创建对象。
通过反射创建对象
1.实例化 无参 构造函数
2.实例化有参构造函数
通过反射获取方法,属性等API
getDeclaredMethods() :获取该类的所有方法
getReturnType() :获取该类方法的返回值
getParameterTypes() :获取该类方法传入参数
getDeclaredFields() :获取该类所有字段
setAccessible :允许访问私有成员
这里都是获取改类的?那么如何获取父类的呢?
通过 子类.getSuperclass() 获取父类对象
getDeclaredMethods 获取该类的所有方法
getReturnType()获取方法的返回值
getParameterTypes() 获取该类方法的传入参数类型
getDeclaredFields() 可以访问变量,注意这里只能访问公共成员变量私有变量是访问不到的
setAccessible 设置可以访问私有成员变量