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

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反射机制核心代码

    java反射机制核心代码,小弟一直弄不明白,怎么通过反射来调用私有成员方法,看了这个后,你可以随心调用private方法,和属性,记得添加setAccessable(true),哦,要不还是不行,如:method.setAccessable(true);

    Java反射机制.txt

    ava反射机制 概述:通俗地讲Java反射就是通过类名获得类的实例的方法。java.lang.reflect提供了实现Java反射的API。

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    3.2.3 Java反射机制的相关API java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口。反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问。它允许在安全限制内使用反射的字段,...

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

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

    Java中的反射机制Reflect

    NULL 博文链接:https://vvsongsunny.iteye.com/blog/2038054

    java-reflect:反射

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

    java中的反射机制(内含大量实例)

    java 高级必学资料 java中的反射机制(内含大量实例)

    java反射机制详解

    java中的反射机制,pdf文档,常用的反射用法都有详细的说明。

    候捷谈Java反射机制

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

    android系统java反射机制详解

    详细解析java的反射机制

    Reflect:学习java反射机制

    Reflect学习java反射机制

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

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

    java 反射对XML的解析

    java中的reflect机制解析XML

    Reflect:java反射机制的测试和ppt

    Reflectjava反射机制的测试和ppt

    java Reflection 反射机制 反编译

    import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class ReflectionTest { public static void main(String[] args) { Class c = null; try { ...

    Java Reflect

    我看了看Java的反射机制,挺好的,但是JDK翻译的不怎么清楚,我自己写了两个Example,希望对大家有帮助。

    Java学习之反射机制

    java语言区别于C,C++等准静态语言的大特点是java的反射机制。静态语言的直接定义是不能在运行时改变程序结构或变量的类型.按照这样的定义,python,ruby是动态语言,C,C++,Java不是动态语言。虽然在这样的定义下...

    Java类加载机制与反射-PPT

    Java的类加载机制:加载,连接,初始化。JAVA类加载器: Bootstrap ClassLoader : 根类加载器, Extension ClassLoader: 扩展类加载器, System ClassLoader : 系统类加载器, Java反射

Global site tag (gtag.js) - Google Analytics