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

java reflection

阅读更多

Java Reflection(反射)是一种在运行期间查看Java对象内部情况的技术,包括Java对象的变量、支持的方法、实现的接口、扩展的类——基本上在编译时你能想知道的关于对象的任何东西。

Reflection API位于java.lang.reflect包中。

载入指定的类,Class c = Class.forName(String className); 例,Class c = Class.forName("java.lang.String");

访问类的内部成员和其他相关信息:

  • getMethods():返回一组表示类或接口的所有公共方法的方法对象数组。
  • getConstructors():返回一组表示类的所有公共构造器的构造器对象数组。
  • getFields():返回一组表示类或接口所有公共字段的字段对象数组。
  • getClasses():返回一组表示所有属于类或接口的公共类和接口(例如,内部类)的类对象数组。
  • getSuperclass():返回表示类或接口的超类的类对象(接口返回为空值)。
  • getInterfaces():返回一组表示类或接口执行的所有接口的类对象数组。

更精确的一些方法:

  • getMethod("methodName", Class...):返回表示接受类参数指定参数的类或接口中名为“methodName”的公共方法的方法对象。
  • getConstructor(Class...):返回表示接受类参数指定参数的类公共构造器的构造器对象。
  • getField("fieldName"):返回表示类或接口中名为“fieldname”的公共字段的字段对象。

 动态调用类内部的方法:

  • Field.get(Object):返回一个包含输入get()对象实例的字段值对象。(如果字段对象表示静态字段,那么对象参数便被忽略,也可能为空。)
  • Method.invoke(Object, Object...):返回一个包含为输入invoke()的第一个对象参数实例调用方法的结果的对象。其余对象参数被传递给输入方法。(如果方法对象表示一个静态方法,那么第一个对象参数便被忽略,也可能为空。)
  • Constructor.newInstance(Object...):返回调用构造器的新对象实例。对象参数输入构造器。(注意类的无参数构造器也可以通过newInstance()被调用。)

调用内部方法:

java 代码
  1. // method
  2. public int add(int a, int b) {
  3.     return a + b;
  4. }
  5. // sample
  6. Class cls = Class.forName("method2");   
  7. Class partypes[] = new Class[2];   
  8. partypes[0] = Integer.TYPE;   
  9. partypes[1] = Integer.TYPE;   
  10. Method meth = cls.getMethod("add", partypes);   
  11. method2 methobj = new method2();   
  12. Object arglist[] = new Object[2];   
  13. arglist[0] = new Integer(37);   
  14. arglist[1] = new Integer(47);   
  15. Object retobj= meth.invoke(methobj, arglist);   
  16.   

初始化对象:

java 代码
  1. // constructor   
  2. public constructor2 ( ) {   
  3.   
  4. }   
  5.   
  6. public constructor2 (int a, int b) {   
  7.      System.out.println("a = " + a + " b = " + b);   
  8. }   
  9.   
  10. // sample   
  11. Class cls = Class.forName("constructor2");   
  12. Class partypes[] = new Class[2];   
  13. partypes[0] = Integer.TYPE;   
  14. partypes[1] = Integer.TYPE;   
  15. Constructor ct = cls.getConstructor(partypes);   
  16. Object arglist[] = new Object[2];   
  17. arglist[0] = new Integer(37);   
  18. arglist[1] = new Integer(47);   
  19. Object retobj = ct.newInstance(arglist);   
  20.   

改变字段(域)的值:

java 代码
  1. Class cls = Class.forName("field2");   
  2. Field fld = cls.getField("d");   
  3. field2 f2obj = new field2();   
  4. System.out.println("d = " + f2obj.d);   
  5. fld.setDouble(f2obj, 12.34);   
  6.   

使用数组:

java 代码
  1. Class cls = Class.forName("java.lang.String");   
  2. Object arr = Array.newInstance(cls, 10);   
  3. Array.set(arr, 5"this is a test");   
  4. String s = (String)Array.get(arr, 5);   
  5. System.out.println(s);   
  6.   

 

参考:

Sun java reflection tutorial  http://java.sun.com/docs/books/tutorial/reflect/index.html

Java Reflection-JAVA反射 http://www.mikecat.net/blogview.asp?logID=1421  

使用 Java Reflection  http://www.apusic.com/article/article5.htm  

分享到:
评论

相关推荐

    java reflection in action

    在《Java Reflection in Action》这本书中,作者深入探讨了这一主题,帮助开发者理解并有效地利用Java反射机制。这本书是2005年出版的英文版,对于想要提升Java编程技能,特别是对动态类型和元编程感兴趣的开发者来...

    Java Reflection in Action

    Java Reflection in Action这本书作为Java反射机制的经典之作,详细介绍了反射技术的应用和相关的概念基础,是Java开发者的必备书籍。 首先,反射允许开发者在不知道对象具体类型的情况下,通过类名获取类类型,...

    Java Reflection In Action

    本书《Java Reflection in Action》深入浅出地讲解了Java反射技术的各种应用场景和技术细节。书中通过一系列生动的例子展示了如何安全有效地使用反射技术解决实际问题。例如: 1. **使用反射进行动态代理**:介绍了...

    Java Reflection in Action_PDF+sample source

    《Java Reflection in Action》这本书深入探讨了这一主题,为开发者提供了理解和运用反射的强大工具。这本书包含了PDF版的全文以及示例源代码,帮助读者通过实践来学习。 1. **反射基础**: - 反射API:`java.lang...

    Java Reflection In Action(英文版)

    《Java Reflection In Action》这本书深入探讨了这个主题,对于理解和掌握Java动态性有着极大的帮助。以下是关于Java反射的一些关键知识点: 1. **反射基础**:反射API主要包括`java.lang.Class`、`java.lang....

    基于Java Reflection自动逆向生成类间方法关系图的解析器.pdf

    Java Reflection是Java提供的用于在运行时获取类、接口、方法、字段等信息的机制。在本论文中,作者利用反射机制开发了一个能够自动逆向分析Java源代码或编译后的.class文件的解析器。反射在动态语言编程中有着广泛...

    Manning Java Reflection In Action

    Java Reflection in Action Java Reflection in Action is unique in presenting a clear account of all the cool things you can do with reflection, and at the same time providing the sound conceptual basis...

    Java Reflection (JAVA反射)详解

    Java 反射(Reflection)是Java编程语言的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、方法、字段等)并直接操作对象的内部属性。这为开发者提供了强大的灵活性,能够在不预先知道具体类的情况下...

    JAVA REFLECTION IN ACTION

    《JAVA反射在行动》这本书由Ira R. Forman和Nate Forman撰写,由MANNING出版社出版,是一本深入探讨Java反射机制及其应用的权威指南。反射是Java语言的一项强大特性,允许运行时检查类的信息并操作类的对象,这在很...

    Java Reflection (JAVA反射)

    ### Java反射机制详解 #### 一、Java反射机制概述 反射是Java编程语言的一个关键特性,它赋予了Java程序在运行时自我检查的能力,并能够直接操纵程序内部的属性。通过反射,开发者可以在运行时获取类的信息(如...

    基于Java Reflection的数据库访问通用模型设计与实现.pdf

    "基于Java Reflection的数据库访问通用模型设计与实现" 本文提出了基于Java Reflection机制和面向接口的编程思想,设计并实现了一款Java数据库访问通用模型,该模型具有适用范围广、轻量级、可扩展性好等特点,可以...

    Manning - Java Reflection in Action

    《Java Reflection in Action》一书由Ira R. Forman和Nate Forman共同撰写,旨在帮助读者深入理解Java反射机制的核心概念和技术细节,并通过一系列实用案例展示如何有效地利用反射技术来解决实际问题。 #### 二、...

    Java反射经典实例 Java Reflection Cookbook[1].pdf

    ### Java反射经典实例详解 #### 一、引言 反射是Java编程语言中的一个重要特性,它允许程序在运行时检查自身结构(如类、字段、方法等),并且可以在运行时调用任意一个类的成员(包括私有成员)。这一特性为Java...

    Java Reflection (JAVA反射.mht

    Java Reflection (JAVA反射.mht

Global site tag (gtag.js) - Google Analytics