在java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自java语言的反射机制(Reflection) 一、什么是反射? 反射就是指程序在运行时能够获取自身的信息,Java反射机制主要提供了以下功能: 1、在运行时获取任意一个对象所属的类 2、在运行时构造任意一个类的对象 3、在运行时判断任意一个类所具有的成员变量和方法 4、在运行时调用任意一个对象的方法 二、反射功能的具体实现 1、获取Class对象,有三种方式可以获取类的Class对象:
//1、使用Class类的静态方法forName(String "类名的全称") Class c = Class.forName("com.lwk.model.Student"); //2、java中每个类型都有class属性 Class c = Student.class; //3、java中每个类型都有一个getClass()方法 Class c = Student.getClass();2、获取Class对象以后,我们就需要用它其来创建其对应的实例对象
Class c = Class.forName("com.lwk.model.Student"); Student stu = c.getInstance();3、获取属性或者方法
Class c = Class.forName("com.lwk.model.Student"); //获取所有的属性 Field[] fs = c.getDeclaredFields(); //获取单个属性(需要指定属性名) Filed f = c.getDeclaredFiled(String name); //获取所有的方法 Method[] ms = c.getDeclaredMethods(); //获取单个属性(需要指定方法名和参数类型列表) Method m = c.getDeclaredMethod(String name,Class<?>... parameterTypes);