`
laodaobazi
  • 浏览: 273149 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java中的反射

阅读更多

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() ;
	}
}

 

分享到:
评论

相关推荐

    java中反射的概念

    通过学习后,保证初学者对反射有一个很好的理解,有助于之后对反射的进一步...其中LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。

    java中反射知识总结

    java中反射知识总结 1.Chp16 2.类对象 3.反射包 4.反射的作用

    java反射 java反射 java反射java反射

    java反射 java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射java反射

    java例子 java反射

    java学习例子 java java例子 java反射

    java习题-反射-chap15.pdf

    Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象以及invoke 方法●标注练习 1. (类对象)要获得类对象,有三种不同的方式,分别为_____________________、___________________、_____________________...

    Java中的反射机制

    Java中的反射机制Java中的反射机制Java中的反射机制

    Java方法反射调用demo

    Java反射 调用空参方法 调用Object类型参数的方法 调用基本类型参数的方法 调用基本类型数组参数的方法 调用String数组参数的方法 调用Object数组参数的方法 调用私有方法

    java 反射机制例子

    讲解了JAVA中反射机制,包含例子,代码!对初学者很有用

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    java反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJBjava反射与EJB

    java之反射优化(缓存思路)源码

    java之反射优化(缓存思路)源码 编程中,抽象是一个重要思想。一个无状态(业务less)的抽象化工具方法,往往可以起到减少代码量的作用,使得程序员能更加focus更加重要的业务逻辑中去

    JAVA 反射机制应用

    JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用

    详解java中反射机制(含数组参数)

    主要介绍了详解java中反射机制(含数组参数)的相关资料,希望通过本文能帮助到大家,让大家理解掌握这部分内容,需要的朋友可以参考下

    java 反射中操作数组

    java 反射中操作数组 java 反射中操作数组 java 反射中操作数组

    Java中反射的一个简单使用

    一直感觉Java的反射机制很强大,JAVA反射技术在平时我们的开发中虽然很少会用到,但在我们所使用的框架源码中是经常会用到的。这篇文中就给大家介绍了关于Java中反射的一个简单使用,有需要的朋友们下面来一起看看吧...

    java反射机制.zip

    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反射 Java反射理论 Java反射实例 Java反射例子 反射原理 反射 网络论文 集合 汇总 总结 Class。

    JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码

    JAVA提高反射效率,Java代码精粹,高手实现,反射高效代码

Global site tag (gtag.js) - Google Analytics