整章反射:
1、反射定义:
反射是在程序运行中对任意应该类,都可以知道这个类的所有属性和方法,对于任意应该对象,都能调用它的方法和获取它的属性,这种动态获取信息及动态调用对象方法的机制叫反射机制。
反射其实就是动态加载一个指定的类到内存中,形成类的字节码文件对象(或者内存中已加载该类的字节码文件对象),并获取该类中我们所需要的内容。再将这些内容封装成相对应的对象,便于对这些内容进行操作。
反射技术可以对一个类进行拆分,并动态获取类中的特有内容。
反射的好处:大大的增强了程序的扩展性。
2、反射的步骤:
(1)获取指定名称的字节码文件对象(Class类对象)。
(2)获得类的属性、方法或构造函数(或者父类、子类、实现的接口等)。
(3)访问属性、调用方法、调用构造函数创建对象。
3、Class类
Class类是程序中的类的字节码文件对象,只要在程序中出现的类型,都有各自的Class实例对象
Class类是反射的基础,只有获得了Class类对象才能对程序进行反射操作得到Class对象的三种方式:
(1)Class cla = 类名.class 需要明确类名,但不需要有对象
(2)Class cla = 对象.getclass(); 需要就明确具体的类,并创建该类对象
(3)Class cla = Class.forName("完整的类名"); 编译时不需要明确类,运行时可以动态传入类名
9个预定义的Class实例对象:
八个基本数据类型和void
基本类型的class和TYPE:
Integer.class 包装类的字节码(与对应的基本类型的字节码对象不同)
Integer.TYPE 该字段返回对应的基本类型的字节码文件对象
int.class==Integer.TYPE 这两者是相同的
方法:
Constructor Class对象 .getConstructor(参数列表的Class对象); 得到对应参数的构造方法
Constructors[] Class对象.getConstructors();