Java语言允许通过程序化的方式间接对class进行操作,Class文件由类装载器装载后,在JVM中形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:如构造函数,属性和方法等。Java允许用户借由有这个Class相关的元信息对象间接调用Class对象的功能,这就为使用程序化方式操作Class对象开辟了途径。
public class ReflectTest{
ublic static Car initByDefaultConst() throws Throwable
{
//①通过类装载器获取Car类对象
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass(类的包的全名);
//②获取类的默认构造器对象并通过它实例化Car
Constructor cons = clazz.getDeclaredConstructor((Class[])null);
Car car = (Car)cons.newInstance();
//③通过反射方法设置属性
Method setBrand = clazz.getMethod("setBrand",String.class);
setBrand.invoke(car,"红旗CA72");
Method setColor = clazz.getMethod("setColor",String.class);
setColor.invoke(car,"黑色");
Method setMaxSpeed = clazz.getMethod("setMaxSpeed",int.class);
setMaxSpeed.invoke(car,200);
return car;
}
}
在ReflectTest中,使用了几个重要的反射类,分别ClassLoader,Class,Constructor和Method,通过这些反射类就可以间接调用目标Class的各项功能。在1处,我们获取当前线程
的ClassLoader,然后通过指定的全权限定类,装载Car类对应的反射实例。在2处,我们通过
Car的反射类对象获取Car的构造函数对象,通过构造函数对象的newInstance()方法实例化Car对象,效果相当于new Car().在3处,我们通过Car的反射类对象的getMethod(String,methodName,Class paramClass)获取属性的Setter方法对象,第一个参数是目标Class的方法名;第二个参数是方法中要添加的对象类型。获取方法反射对象后,即可通过Invoke(Object obj,Object param)方法调用目标类的方法,该方法的第一个参数是操作的目标类对象实例;第二个参数是目标方法的入参。
Java反射涉及到以下三个反射类:
1、Constructor:类的构造函数反射类,通过getConstructors()方法可以获得所用构造函数反射对象数组。在JDK5.0中,还可以通过getConstructor(Class ...parameterType)获取拥有特定入参的构造函数反射对象。
2、Method:类方法的反射类,通过class的getDeclaredMethods()方法可以获得所用方法反射类的对象组。
3、Field:类的成员变量的反射类,通过Class#getDeclaredFields()方法可以获取的成员变量反射对象数组,通过Class#getDeclaredField(String name)则可以获取某个特定名称的成员变量反射对象。
在访问private、protected成员变量和方法时必须通过setAccessible(boolean access)方法取消Java语言检查,否则将抛出IllegalAccessException。
分享到:
相关推荐
java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射
JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用
java反射,获取所有属性、方法以及List集合类
java反射java反射java反射java反射java反射
Java反射
代码为JAVA反射的一个DEMO,适合初学者临摹学习,还附有properties的创建方法,比较基础。
1.通过Java反射机制获取JavaBean对象。 2.通过JavaBean全路径字符串获取JavaBean对象。 3.获取JavaBean注解信息
Java反射经典实例 Java反射经典实例 Java反射经典实例 Java反射经典实例
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...
反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc...
java 反射 调用私有方法(有参数私有方法)获取私有属性值
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
java 反射demo
java反射获取所有属性,获取所有get方法,包括子类父类,以及包括List集合类
java 反射中操作数组 java 反射中操作数组 java 反射中操作数组
Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档
java反射理论及实现
java反射机制原理和反射机制总结!!! java反射机制原理和反射机制总结!!!