反射(Reflection)
java中无论某一个类生成多少个对象,这些对象都会对应于同一个Class对象()一个类,对应于一个Class 对象。
1.发射的4个基本功能:
1.在运行时判断任意一个对象所属的类。
2.在运行时构造任意一个类的对象。
3.在运行时判断任意一个类所具有的成员变量。
4.在运行时调用任意一个对象的方法。
2.实现反射的类主要有5个:
1.Class 类 代表一个类,存在于java.lang 包中
2.Field 类 代表类的成员变量(也称属性),java.lang.reflect
3.Method 类 代表类的方法
4.Constructor 类 代表类的构造方法
5.Array 类 提供了动态创建数组,以及访问数组元素的静态方法
* Class 代表一类什么样的事物?
* 任何类型都可以用一个Class来表示,任何类型在内存中都是一份字节码。
*
* 如何给Class 赋值?
* Class cls1=Person.class; 代表Person 那个类的字节码。
* Class cls2=Date.class; 代表Date 那个类的字节码。
* 有两种返回方式,
* 第一种是该份字节码被加载过,java虚拟机里直接返回即可,
* 第二种是Java虚拟机还没有该字节码,则用类加载器去加载,把加载进来的字节码缓存在虚拟机里,以后要得到该字节码就不用在加载了
*
* 得到字节码的方式有三种,使用平率都很高
* 1.类名.class 固定的写法,
* 2.对象.getClass();
* 3.Class.forName("类名"); 反射主要使用Class.forName("java.lang.string"); 因为在写源程序的时候还不知道类的名字