`
xijunhu
  • 浏览: 155916 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

java的reflect机制(反射)

阅读更多

转载
http://jackleliu.spaces.live.com/blog/cns!426307897fa1054e!125.entry

java的reflect机制(反射)
为了学习reflect,特意写了两个类,我觉得反射最重要的就是通过方法名调用方法.
一个被调用的类,和一个 利用reflect的调用类.
PlainJavaClass.java:
package reflect;
public class PlainJavaClass {
  public int a = 2;
  public int b = 3;
  public PlainJavaClass()
  {
     
  }
  public PlainJavaClass(int a,int b)
  {
    this.a = a;
    this.b = b;
  }
  public int add()
  {
      return a + b;
  }
  public int plus(int a, int b)
  {
      return a-b;
  }
}

ReflectJavaClass.java:

package reflect;
import java.lang.reflect.*;
public class ReflectJavaClass {
    public void invokePlain() {
        Class Plain = null;
        Method add = null;
        Method plus = null;
        Class[] plusPara  = {int.class,int.class};
        Object[] transPlusPara = {new Integer(50),new Integer(20)};
        Object addReturnObj = null;
        Object plusReturnObj = null;
        try {
            Plain  = Class.forName("reflect.PlainJavaClass");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return;
        }
       
        try {
            add = Plain.getDeclaredMethod("add",null);
            plus = Plain.getDeclaredMethod("plus",plusPara);
        } catch (SecurityException e) {
            e.printStackTrace();
            return;
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
            return;
        }
        try {
            addReturnObj = add.invoke(new PlainJavaClass(5,2),null);
            plusReturnObj = plus.invoke(new PlainJavaClass(),transPlusPara);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            return;
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            return;
        } catch (InvocationTargetException e) {
            e.printStackTrace();
            return;
        }
        Integer addReturnValue = (Integer)addReturnObj;
        Integer plusReturnValue = (Integer)plusReturnObj;
        System.out.println("return value :"+addReturnValue);
        System.out.println("return value :"+plusReturnValue);
    }
    public static void main(String[] args)
    {
        new ReflectJavaClass(). invokePlain();
    }
}
  可以看出是第2个类来调用第一个类.
  要利用java的reflect首先要取得PlainJavaClass对应的Class对象:Plain  = Class.forName("reflect.PlainJavaClass"),注意其中的reflect.PlainJavaClass类名称中包名reflect不能缺少.
  得到Plain之后就可以得到Plain中定义的某个方法,add=Plain.getDeclaredMethod("add",null);或者plus = Plain.getDeclaredMethod("plus",plusPara);其中第一个参数是方法名(String),第2个是参数的类型数组(Class[]).
  得到了Method对象就可以调用了.addReturnObj = add.invoke(new PlainJavaClass(5,2),null);或者plusReturnObj = plus.invoke(new PlainJavaClass(),transPlusPara); ,invoke第一个参数是方法所在对象(Object),第2个参数是方法传进去的参数值(Objec[]).
  方法调用之后可以得到相应的返回值:
        Integer addReturnValue = (Integer)addReturnObj;
        Integer plusReturnValue = (Integer)plusReturnObj;
        System.out.println("return value :"+addReturnValue);
        System.out.println("return value :"+plusReturnValue);  
  运行结果如下:
return value :7
return value :30
分享到:
评论

相关推荐

    Java reflect 机制详解

    免费共享,很详细的介绍了反射机制的原理,适合追根究底的java学习者

    java面试题--反射机制

    Java反射机制主要依赖于`java.lang.reflect`包下的API,其中包括: - `java.lang.Class`:表示一个类的运行时信息。 - `java.lang.reflect.Method`:表示类的方法。 - `java.lang.reflect.Field`:表示类的字段。 -...

    Java反射机制 Java反射机制

    Java反射机制主要通过`java.lang.reflect`包下的API实现,其中最重要的类包括: - `Class`:代表一个类,是所有反射操作的基础。 - `Method`:表示类中的一个方法。 - `Constructor`:表示类中的一个构造函数。...

    Java中的反射机制

    ### Java中的反射机制 #### 一、反射的概念 反射的概念最早由Smith于1982年提出,是指程序能够访问、检测和修改其自身状态或行为的能力。这一概念的引入促进了计算机科学领域对反射性的研究,并迅速被应用于程序...

    Reflection_in_Java.zip_in_java 反射_java 反射机制_java反射_反射机制

    在Java中,反射主要涉及到`java.lang.Class`类、`java.lang.reflect`包下的类如`Constructor`、`Method`和`Field`等。通过这些类,我们可以实现对Java对象的深度控制,比如访问私有属性、调用私有方法、创建对象等。...

    Java反射机制

    ### Java反射机制详解 #### 一、什么是Java的反射机制 Java反射机制是Java语言的一种重要特性,使得Java成为了一种动态性很强的语言。通过反射,可以在程序运行时获取类的信息,包括类名、父类、接口、字段、方法...

    实战java反射机制-让你迅速认识java强大的反射机制

    Java反射机制主要基于`java.lang.Class`类和`java.lang.reflect`包中的接口和类。`Class`对象代表了运行时的类信息,通过`Class.forName()`方法可以获取到类的`Class`对象。此外,`java.lang.reflect`包中的`...

    Java中的反射机制Reflect

    Java中的反射机制是Java语言一个强大的特性,它允许在运行时检查类、接口、字段和方法的信息,并且能够动态地创建对象和调用方法。在深入理解Java反射机制之前,我们首先需要知道什么是类的元数据,即关于类本身的...

    java中的反射reflect

    本文将通过实例深入解析Java反射机制。 首先,我们来看`TestParam.java`和`ParamClass.java`这两个文件,它们可能涉及到参数化类的使用。在Java中,反射可以帮助我们在运行时获取泛型信息。尽管Java的类型擦除导致...

    什么是java中的反射机制(reflect).docx

    Java 反射机制的实现是通过 java.lang.Class 类和 java.lang.reflect 包来实现的。Class 类代表了 Java 中的一个类,而 java.lang.reflect 包提供了许多反射类,例如 Constructor、Method、Field 等。 Constructor ...

    java反射机制详解

    ### Java反射机制详解 #### 一、反射机制是什么 反射机制是Java编程语言的一个核心特性,它允许程序在运行时动态地获取类的信息,并且能够动态地创建对象和调用对象的方法。简单来说,反射机制使得Java程序可以...

    Java反射机制总结

    ### Java反射机制总结 #### 反射的概念与起源 反射的概念最早由Smith于1982年提出,指的是程序能够访问、检测并修改其自身状态或行为的能力。这一概念的提出迅速引起了计算机科学领域的广泛关注,并在之后的研究中...

    反射实例-JAVA反射机制

    ### 反射实例—JAVA反射机制 #### 一、反射概念及原理 反射在计算机科学领域,特别是程序设计中,是指程序有能力访问、检测和修改其自身的结构和行为。这一概念最早由Smith于1982年提出,并迅速应用于各种编程语言...

    Java 反射机制 代码的实例

    Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、对象等的内部结构。通过反射,开发者可以动态地获取类的信息并调用其方法,创建对象,访问私有成员,甚至改变类的行为。在深入...

    候捷谈Java反射机制

    Java反射的核心在于`java.lang.Class`类,以及`java.lang.reflect`包中的`Method`、`Field`和`Constructor`等类。`Class`类非常特殊,它代表了运行时的Java类和接口,包括枚举、数组、原始Java类型和void关键字。每...

    Java反射机制课件ppt

    Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具有高度的灵活性和动态性,可以在编译时未知类的情况下进行类的加载、实例化、方法调用等操作...

    JAVA反射机制的入门代码

    在Java中,反射主要通过`java.lang.Class`类和`java.lang.reflect`包中的几个关键类(如`Constructor`、`Method`和`Field`)来实现。当你在程序运行时获取到一个类的`Class`对象,你就可以获取该类的所有信息,包括...

    Java反射机制的实现_Reflection

    首先,要使用Java反射,我们需要导入`java.lang.reflect`包中的关键类,如`Class`、`Constructor`、`Method`和`Field`。`Class`对象是反射的起点,它代表了Java中的类或接口。我们可以通过以下三种方式获取`Class`...

    java 反射机制例子

    ### Java反射机制详解 #### 一、反射的基本概念与历史背景 反射的概念最早由Smith在1982年提出,其核心思想是程序有能力访问、检测甚至修改自身的状态和行为。这种能力一经提出,迅速成为了计算机科学领域的研究...

Global site tag (gtag.js) - Google Analytics