`
lshh83
  • 浏览: 159629 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

利用java反射机制执行类的方法

阅读更多
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。Java 的这一能力在实际应用中也许用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。
  写个例子来演示下:
package reflection;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class DumpMethods {

	public static void main(String args[]) {
		String className = "reflection.DumpMethods";
	      try {
	          Class c = Class.forName(className);
	          Class ptypes[] = new Class[2];
	          ptypes[0] = Class.forName("java.lang.String");
	          ptypes[1] = Class.forName("java.util.List");
	          Method m = c.getMethod("func",ptypes);
	          Object obj = (Object)c.newInstance();
	          Object arg[] = new Object[2];
	          arg[0] = new String("Hello world");
	          List list = new ArrayList();
	          list.add("val1");
	          list.add("val2");
	          arg[1] = list;
	          Object r = m.invoke(obj, arg);
	          System.out.println(r.toString());

	      } catch (Throwable e) {
	          System.err.println(e);
	      }
			
	  }
	
	public String func(String s, List list){
		System.out.println("func invoked");
		for(int i=0;i<list.size();i++){
			s = s+" "+list.get(i).toString();
		}
		return s;

	}
}

运行结果:
func invoked
Hello world val1 val2
分享到:
评论
8 楼 hongbiangoal 2009-07-25  
谁发一个详细点的反射过程看看
7 楼 akfucc 2009-07-25  
我个人的习惯
一, 在系统启动时, 比如你用到Annotation时, 可以在初始化的时候进行扫描.


二, 你的代码想要通用性
6 楼 summeryhrb 2009-07-13  
lian 写道
没有反射就没有框架,反射是java的灵魂

反射是必须掌握的,大到j2ee容器的实现,小到一个可插接的结构,到处都是反射。
5 楼 moshalanye 2009-07-13  
    反射的使用也是有策略的麻,反射给java带来了动态和灵活,mvc框架处理请求转发也都是使用反射。
    虽说反射消耗性能,但不能代表我们不能用灵活的办法去规避性能问题,使用缓存机制,将已经反射得到的东西放在内存中,就能灵活的规避效率的损耗。我们接受不了每次都用反射,却可以接受一次反射而永远受用的方式。
    cglib封装了asm,可以在运行期动态生成新的class,这个跟反射不能成为对比关系吧?(弱弱的问下 :〉)
  反射貌似在pojo对象 克隆 也能起到很好的运用,beanutils就是采用这样的方式去克隆对象。
  动态的将对象序列化成某个指定格式的形式(例如指定格式的xml)也能通过反射获得很多开发上的便洁。
  动态代理使用反射在刚开始确实给人眼前一新的感觉,其方便灵活的实现aop确实带给人震撼的感受,但由于效率的问题貌似实际使用并不多见。
   
4 楼 lian 2009-07-05  
没有反射就没有框架,反射是java的灵魂
3 楼 whatwhat 2009-07-04  
fjlyxx 写道
ASM CGLIB的使用已经可以提高很多了

效率提高很多吗?
为什么?它不用反射机制吗?
2 楼 fjlyxx 2009-07-04  
ASM CGLIB的使用已经可以提高很多了
1 楼 whatwhat 2009-07-03  
反射 是一个 好东西,它让JAVA更灵活,
不过考虑到效率 最好不要大量使用,

相关推荐

    Java的反射机制讲解案例代码 Class类、 获取类的结构信息:构造函数、方法和字段,动态创建对象、调用方法和设置属性

    适用于有一定Java编程基础的开发人员,希望了解和应用Java反射机制的使用者。 使用场景及目标 使用反射机制的典型场景包括以下几个方面: 在运行时动态加载和创建类对象。 通过反射调用对象的方法和访问对象的字段...

    通过java类的路径实例化类并调用方法

    通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法

    利用Java的反射与代理实现IOC模式

    利用Java的反射与代理实现IOC模式 在Java中,其反射和动态代理机制极其强大,我们可以通过其反 射机制在运行时获取信息。而代理是一种基本的设计模式,它是一种为了提供额外的或不同的操作而插入到真 实对象中的...

    复习反射利用反射机制和AOP代理模式

    reflection是一系列的API,用于表示或者处理当前JVM中的类,接口和对象. java.lang.reflect/java.lang.Class 在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

    用Java反射机制简化Struts框架逻辑控制.pdf

    Struts框架可提高J2EE平台上应用系统的可扩展性和可重用性。但其较为复杂的控制层过多地分散...java反射机制提供了在程序运行时加载和调用类的功能,利用它可简化Struts框架下的逻辑控制。本文在分析了Struts框架工作...

    Java反射机制应用实践

     Java反射机制是一个非常强大的功能,在很多大型项目比如Spring, Mybatis都可以看见反射的身影。通过反射机制我们可以在运行期间获取对象的类型信息,利用这一特性我们可以实现工厂模式和代理模式等设计模式,...

    Qt 反射机制实现,通过类名创建对象

    反射是指程序在运行时动态获取对象属性与...简单一点说,就是可以通过类名称来创建一个类对象,这在Java和Object-C中是原生支持的,所以实现起来非常简单,但是C++就不支持了,如果想要用到反射机制,那就得自己实现。

    Java反射机制的原理及在Android下的简单应用

    在Java中的反射机制,被称为Reflection。(大家看到这个单词,第一个想法应该就是去开发文档中搜一下了。)它允许运行中的Java程序对自身进行检查,并能直接操作程序的内部属性或方法。Reflection机制允许程序在正在...

    Java开发技术大全(500个源代码).

    DumpMethods.java 使用反射机制来获取类中的方法 getClassName.java 利用反射机制获取类的名字 invokeConstructor.java 利用反射机制调用构造器 invokeMethod.java 利用反射机制调用成员方法 listConstructors....

    多线程执行指定名称方法 Java

    利用Java的反射机制,提供一个根据方法名执行指定方法的方式。

    Java学习day034 反射(一)Class类、捕获异常、利用反射分析类的能力

    使用的教材是java核心技术卷1,我将跟着这本书的章节同时配合视频资源来进行学习基础java知识。 day034 反射(一)Class类、捕获异常、利用反射分析类的能力 反射库(reflection library)...反射机制的功能极其强大,

    Java反射的简单使用

    先来一些不太实用的解释:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java...

    Java编程题自动评分技术的研究与实现_郑燕娥.caj

    (1)对于可以通过编译的考生程序,利用 Java 反射机制提取考生程序的相 关信息进行黑盒测试,给出测试分,再结合语法分、结果分,计算出总得分。 (2) 对于无法通过编译的考生程序,利用本地 jdk 包中的编译器编译...

    JAVA_API1.6文档(中文)

    java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java....

    java api最新7.0

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio ...

    Java 1.6 API 中文 New

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio ...

    java-reflect:反射

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。...

    java高级之反射

    反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的所有成员(成员变量,成员方法,构造 方法)。 反射的使用前提: 要获得该类字节码文件对象,就是Class对象 获取Class对象的三种方式: 方式1...

    JavaAPI1.6中文chm文档 part1

    java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java....

Global site tag (gtag.js) - Google Analytics