一、什么是反射
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。
二、反射能做什么
我们知道反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,包括包括其modifiers(修饰符),fields(属性),methods(方法)等,并可于运行时改变fields内容或调用methods。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等;但是需要注意的是反射使用不当会造成很高的资源消耗!
三、获取Class的三种方式
- 使用
类的class属性
获取对应的Class对象。 - 调用
对象的getClass()方法
,返回该对象所属类对应的Class对象。 - 使用
Class类中的静态方法forName(String className)
,该方法需要传入字符串参数,该字符串参数的值是某个类的全路径,也就是完整包名的路径。
四、反射获取构造方法并使用
例子:
调用多个参数的构造方法
调用单个参数的构造方法
五、反射获取成员变量并使用
例子:
六、反射获取成员方法并使用
例子:
方法有返回值
调用私有成员方法
六、反射之越过泛型检查
练习1:在ArrayList< Integer >集合中添加一个字符串数据。
反射可以获取到原始参数的方法,以越过类型检查。
七、反射之运行配置文件指定内容
练习2:通过配置文件运行类中的方法。
在class.txt文件中配置类名方法等内容。