是什么
反射机制是指在运行状态中,对于任意一个类都能够知道这个类所有的属性和方法; 并且对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能成为Java 语言的反射机制。
为什么
在程序中,对象的类型往往以两种形式呈现,即编译时类型和运行时类型。简单举个多态的例子
Person p = new Student();
这里的p编译时类型为Person,运行时类型为Student。
从这个例子可以看出,多态提高了代码的灵活性。
但是当我们在程序中不清楚外部传入的对象类型,又需要调用它的方法时(封装工具类时),只能依靠反射。因为在编译时无法知道真正的对象(动态的),只有运行时才能发现对象的全部信息。
怎么做
主要的类
- Class类:反射的核心类,可以获取类的属性,方法等信息。
- Field类:Java.lang.reflec包中的类,表示类的成员变量,可以用来获取和设置类之中的属性值。
- Method类:Java.lang.reflec包中的类,表示类的方法,它可以用来获取类中的方法信息或者执行方法。
- Constructor类:Java.lang.reflec包中的类,表示类的构造方法。
获取Class对象
调用某个对象的 getClass方法
Person p=new Person0;
调用某个类的class属性来获取该类对应的Class对象
Class clazz=Person.class;
使用 Class 类中的 forName0静态方法(最安全/性能最好,也是最常用的)
Class clazz=Class.forName("类的全路径”);