反射
一、反射的概述
反射是指对于任何一个Class类,在“运行的时候”都可以直接得到这个类全部成分。
在运行时,可以直接得到这个类的构造器对象:Constructer
在运行时,可以直接得到这个类的成员变量对象:Field
在运行时,可以直接得到这个类的成员方法对象:Method
这种运行时动态获取类信息以及动态调用类中成分的能力称为Java语言的反射机制。
反射的关键:
反射的第一步都是先得到编译后的Class类对象,然后就可以得到Class的全部成分。
|
HelloWorld.java -> javac -> HelloWorld.class
|
二、反射获取类对象
1. 反射的第一步:获取Class类的对象
图一:

图二:

【代码示例1】Stuident类
public class Student {
}
2. 获取Class类对象的三种方式
方式一:Class c1 = Class.forName("全类名");
方式二:Class c2 = 类名.class;
方式三:Class c3 = 对象.getClass( );
【代码示例2】
/**
目标:反射的第一步:获取Class对象
*/
public class Test {
public static void main(String[] args) throws Exception {
// 1、Class类中的一个静态方法:forName(全限名:包名 + 类名)
Class c = Class.forName("com.itheima.d2_reflect_class.Student");
System.out.println(c); // Student.class
// 2、类名.class
Class c1 = Student.class;
System.out.println(c1);
// 3、对象.getClass() 获取对象对应类的Class对象。
Student s = new Student();
Class c2 = s.getClass();
System.out.println(c2);
}
}
三、反射获取构造器对象
使用反射技术获取构造器对象并使用

反射的第一步是先得到类对象,然后从类对象中获取类的成分对象
Class类中用于获取构造器的方法
| 方法 | 说明 |
| Constructor<?>[] getConstructors() | 返回所有构造器对象的数组( 只能拿public的) |
| Constructor<?>[] getDeclaredConstructors() | 返回所有构造器对象的数组, 存在就能拿到 |
| Constructor<T> getConstructor(Class<?>... parameterTypes) | 返回单个构造器对象( 只能拿public的) |
| Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) | 返回单个构造器对象, 存在就能拿到 |

浙公网安备 33010602011771号