本篇文章分为以下几个部分:
1.认识反射
2.反射的源头(Class类)
3.利用反射操作构造方法
4.利用反射调用类中的方法
5.反射中的invoke方法
6.利用反射调用类中的属性
反射在我们普通程序开发中基本使用不到,但是在我们底层的程序设计中使用特别广泛,例如代理模式、工厂模式等一些设计模式,包括我们使用的开发工具以及各大开源框架底层都使用到了反射的原理。所以掌握了Java的反射机制对我们理解各大开源框架都有很好的帮助。
1.认识反射
反射,从这个“反”字可以看出与我们平时正常的使用逻辑肯定不一样,那么到底什么地方不一样了?想要了解“反”,就得先了解一下“正”的概念。
在正常情况下,如果要使用一个类,必须要经过以下几个步骤:
(1)使用important导入类所在的包(类:java.lang.Class)
(2)通过关键字new进行类对象实例化(构造方法:java.lang.reflect.Constructor)
(3)产生对象可以使用“对象.属性”进行类中属性的调用(属性:java.lang.reflect.Field)
(4)通过“对象.方法()”调用类中的方法(方法:java.lang.reflect.Method)
括号中的红色字体是每个步骤对应反射中使用到的类,如果现在不了解,可以先不用管,后面会一一介绍,这里是为了方便进行比较。
在反射中,使用一个类并不需要导入类的所在包,只要知道类的完整路径就可以知道该类中的所有信息。
反射不需要有明确的类型对象,所有的对象都使用Object表示。可以直接用Object的与反射机制的混合调用类中的方法。
2.反射的源头(Class类)
在认识反射机制之前,必须要介绍一下Class类,Class类是整个反射操作的源头,该类的定义如下:
public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement