`
jackle_liu
  • 浏览: 147849 次
文章分类
社区版块
存档分类
最新评论

java的reflect机制(反射)

阅读更多
为了学习reflect,特意写了两个类,我觉得反射最重要的就是通过方法名调用方法.
一个被调用的类,和一个 利用reflect的调用类.
PlainJavaClass.java:
java 代码
  1. package reflect;   
  2. public class PlainJavaClass {   
  3.   public int a = 2;   
  4.   public int b = 3;   
  5.   public PlainJavaClass()   
  6.   {   
  7.          
  8.   }   
  9.   public PlainJavaClass(int a,int b)   
  10.   {   
  11.     this.a = a;   
  12.     this.b = b;   
  13.   }   
  14.   public int add()   
  15.   {   
  16.       return a + b;   
  17.   }   
  18.   public int plus(int a, int b)   
  19.   {   
  20.       return a-b;   
  21.   }   
  22. }  
 
ReflectJavaClass.java:
 
java 代码
  1. package reflect;   
  2. import java.lang.reflect.*;   
  3. public class ReflectJavaClass {   
  4.     public void invokePlain() {   
  5.         Class Plain = null;   
  6.         Method add = null;   
  7.         Method plus = null;   
  8.         Class[] plusPara  = {int.class,int.class};   
  9.         Object[] transPlusPara = {new Integer(50),new Integer(20)};   
  10.         Object addReturnObj = null;   
  11.         Object plusReturnObj = null;   
  12.         try {   
  13.             Plain  = Class.forName("reflect.PlainJavaClass");   
  14.         } catch (ClassNotFoundException e) {   
  15.             e.printStackTrace();   
  16.             return;   
  17.         }   
  18.            
  19.         try {   
  20.             add = Plain.getDeclaredMethod("add",null);   
  21.             plus = Plain.getDeclaredMethod("plus",plusPara);   
  22.         } catch (SecurityException e) {   
  23.             e.printStackTrace();   
  24.             return;   
  25.         } catch (NoSuchMethodException e) {   
  26.             e.printStackTrace();   
  27.             return;   
  28.         }   
  29.         try {   
  30.             addReturnObj = add.invoke(new PlainJavaClass(5,2),null);   
  31.             plusReturnObj = plus.invoke(new PlainJavaClass(),transPlusPara);   
  32.         } catch (IllegalArgumentException e) {   
  33.             e.printStackTrace();   
  34.             return;   
  35.         } catch (IllegalAccessException e) {   
  36.             e.printStackTrace();   
  37.             return;   
  38.         } catch (InvocationTargetException e) {   
  39.             e.printStackTrace();   
  40.             return;   
  41.         }   
  42.         Integer addReturnValue = (Integer)addReturnObj;   
  43.         Integer plusReturnValue = (Integer)plusReturnObj;   
  44.         System.out.println("return value :"+addReturnValue);   
  45.         System.out.println("return value :"+plusReturnValue);   
  46.     }   
  47.     public static void main(String[] args)   
  48.     {   
  49.         new ReflectJavaClass(). invokePlain();   
  50.     }   
  51. }   
  可以看出是第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