1,什么是反射?
反射可以理解为对类的分析。 利用反射,我们可以在运行时分析类,查看类的对象
2,如何实现反射?
那就不得说与反射最为相关的类-----java.lang.Class类
比如: Person类的实例,是具体对象,xiaozhang,xiaowang,bendan
Class类的实例,就是内存中类的字节码 ----》一个类被类加载器加载到内存,占据一部分存储空间,空间里的内容就是类的字节码,不同类的字节码文件是不同的。这一个个空间可以用对象来表示。这些对象对应的类就是Class类
3. 如何得到字节码对应的对象?
其实也是实现反射的最常用语句:
对于类----》类名.class --》 Person.class
对于对象----》 对象.getClass() ----> new Date().getClass()
通过类名---》Class.forName("类名")----->Class.forName(“java,lang,String");
4.都什么样的类型可以应用反射?
或者可以问:什么样的数据类型有Class的实例对象?
只要在源程序中出现的数据类型都有Class的实例对象。int,double这样的基本数据类型有其预定义的Class实例对象, int.Class ==Integer.TYPE
5. 反射有什么用?
一个类的所有成员(方法,属性...)都可以用相应的反射API类(Class类,Constructor,Field,Method。。。。)的一个实例对象来表示。得到这些实例对象,就是反射的作用。我们要知道的是,得到这些实例对象有什么用 ?怎么用 ?
Constructor类------ 类的构造方法
得到类的所有构造方法:
Constructor [] Constructors = Class.forName("java,lang,String").getConstructors();
得到某一个构造方法:
Constructor constructor = Class.forName("java,lang,String").getConstructor("StringBuffer.class")
其余方法可通过API了解。
Field类----类的属性(或者叫类的成员变量)