java的反射原理:
测试类:
package com.jlee.test;
public class MyBean {
private Integer id ;
private String name ;
private Long amount ;
private boolean isRight ;
private double num ;
private static String clazzProperty ;
public static String getClazzProperty() {
return clazzProperty;
}
public static void setClazzProperty(String clazzProperty) {
MyBean.clazzProperty = clazzProperty;
}
private MyTest myTest ;
public MyTest getMyTest() {
return myTest;
}
public void setMyTest(MyTest myTest) {
this.myTest = myTest;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Long getAmount() {
return amount;
}
public void setAmount(Long amount) {
this.amount = amount;
}
public boolean getIsRight() {
return isRight;
}
public void setIsRight(boolean isRight) {
this.isRight = isRight;
}
public double getNum() {
return num;
}
public void setNum(double num) {
this.num = num;
}
public static String staticMethod(String arg){
return "执行类方法......." + arg;
}
@Override
public String toString() {
return "bean的值 id:"+this.getId()+" name:"+this.getName()
+" num:"+this.getNum()+" amount:"+this.getAmount()
+ " isRight:" + this.getIsRight()+" 类属性:"+this.getClazzProperty();
}
}
反射实现类:
package com.jlee.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import com.jlee.test.MyBean;
/**
*
* @author JLee
* @Date 2010-3-2
*/
public class TestReflaction {
public static void main(String[] args)throws Exception {
MyBean bean = new MyBean();
bean.setAmount(Long.parseLong("123123"));
bean.setId(2);
bean.setIsRight(false);
bean.setName("jlee01");
bean.setNum(1);
System.out.println("修改前:"+bean.toString());
TestReflaction t = new TestReflaction();
t.mf1(bean, "name", "jlee02");
t.mf1(bean, "num", 2) ;
System.out.println("第一次修改:"+bean.toString());
t.mf2("com.jlee.test.MyBean", "clazzProperty", "static");
System.out.println("第二次修改:"+bean.toString());
Class[] argTypes = new Class[]{String.class};
Object[] args1 = new Object[]{"jlee03"};
t.mf3(bean, "setName", argTypes, args1);
System.out.println("第三次修改:"+bean.toString());
String str = t.mf4("com.jlee.test.MyBean", "staticMethod", new Class[]{String.class}, new Object[]{"结束"});
System.out.println(str);
}
//直接操作对象属性
public void mf1(Object o , String fieldName ,Object newValue)throws Exception {
Class c = o.getClass() ;
Field f = c.getDeclaredField(fieldName);
f.setAccessible(true);
f.set(o, newValue);
}
//直接操作类(Static)属性
public void mf2(String className, String fieldName ,Object newValue)throws Exception {
Class c = Class.forName(className) ;
Field f = c.getDeclaredField(fieldName);
f.setAccessible(true);
Object fv = f.get(c);
f.set(c, newValue);
}
//调用对象成员方法
public void mf3(Object o,String methodName,Class[] argTypes,Object[] args)throws Exception{
Class c = o.getClass() ;
Method m = c.getDeclaredMethod(methodName, argTypes);
Object result = m.invoke(o, args);
}
//调用类成员方法(static的方法)
public String mf4(String className,String methodName,Class[] argTypes,Object[] args)throws Exception{
Class c = Class.forName(className);
Method m = c.getDeclaredMethod(methodName, argTypes);
Object result = m.invoke(null, args);
return result.toString() ;
}
}
分享到:
相关推荐
通过学习后,保证初学者对反射有一个很好的理解,有助于之后对反射的进一步...其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。
java中反射知识总结 1.Chp16 2.类对象 3.反射包 4.反射的作用
java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射
java学习例子 java java例子 java反射
Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象以及invoke 方法●标注练习 1. (类对象)要获得类对象,有三种不同的方式,分别为_____________________、___________________、_____________________...
Java中的反射机制Java中的反射机制Java中的反射机制
Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法
讲解了JAVA中反射机制,包含例子,代码!对初学者很有用
java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB
java之反射优化(缓存思路)源码 编程中,抽象是一个重要思想。一个无状态(业务less)的抽象化工具方法,往往可以起到减少代码量的作用,使得程序员能更加focus更加重要的业务逻辑中去
JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用
主要介绍了详解java中反射机制(含数组参数)的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下
java 反射中操作数组 java 反射中操作数组 java 反射中操作数组
一直感觉Java的反射机制很强大,JAVA反射技术在平时我们的开发中虽然很少会用到,但在我们所使用的框架源码中是经常会用到的。这篇文中就给大家介绍了关于Java中反射的一个简单使用,有需要的朋友们下面来一起看看吧...
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
java 通过反射获取枚举类,及枚举类的值,枚举类枚举实例名。本项目为普通java项目
Java反射经典实例 Java反射经典实例 Java反射经典实例 Java反射经典实例
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。... 关键字有:Java Java反射机制 Java反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。
JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码