1、什么是 反射机制?
反射机制实在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象方法的功能称之为java的反射机制。
2、反射机制有什么用?
1)在运行时判断任意一个属性所属的类
2)在运行时构造任意一个类的对象
3)在运行时判断任意一个类所具有的成员变量和方法
4)在运行时调用任意一个对象的方法
5)生成动态代理
3、反射机制相关的API
通过一个对象获得完整的包名与类名
package www.demo.reflect; public class testReflect { public static void main(String[] args) { testReflect tr = new testReflect(); System.out.println(tr.getClass().getName()); } } //运行结果: www.demo.reflect.testReflect
实例化Class对象
package www.demo.reflect; public class testReflect01 { public static void main(String[] args) { Class<?> class1 = null; Class<?> class2 = null; Class<?> class3 = null; // 一般采用这种形式 class1 = Class.forName("net.xsoftlab.baike.TestReflect"); class2 = new testReflect().getClass(); class3 = testReflect.class; System.out.println("类名称 " + class1.getName()); System.out.println("类名称 " + class2.getName()); System.out.println("类名称 " + class3.getName()); } }
获取一个对象的父类和实现接口
package www.demo.reflect; import java.io.Serializable; public class testReflect02 implements Serializable { private static final long serialVersionUID = -2862585049955236662L; public static void main(String[] args) throws Exception { Class<?> clazz = Class.forName("net.xsoftlab.baike.TestReflect"); // 取得父类 Class<?> parentClass = clazz.getSuperclass(); System.out.println("clazz的父类为:" + parentClass.getName()); // clazz的父类为: java.lang.Object // 获取所有的接口 Class<?> intes[] = clazz.getInterfaces(); System.out.println("clazz实现的接口有:"); for (int i = 0; i < intes.length; i++) { System.out.println((i + 1) + ":" + intes[i].getName()); } // clazz实现的接口有: // 1:java.io.Serializable } }