反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。
反射的好处:大大的增强了程序的扩展性。
获取Class对象的三种方式:
1:对象.getClass()
如果拿到了对对象,不知道是什么类型,用于获得对象的类型,
Object obj = new Person();
Class clazz1 = obj.getClass();
弊端:必须要创建该类对象,才可以调用getClass方法。
2:类名.class
如果是明确地获得某个类的Class对象 主要用于传参
弊端:必须要先明确该类。
前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成。
3:Class.forName("全路径");
根据给定的类名来获得 用于类加载使用的Class类中的方法,静态的forName()方法。
指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可。
获取了字节码文件对象后,最终都需要创建指定类的对象:
就是使用了Class类中的newInstance()和newInstance(实际参数)方法。
在newInstance(实际参数)方法中需要明确具体的参数类型,不便于扩展,所以一般情况下,被反射的类的内部通常都会提供一个公有的空参构造函数。
|
|