JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象, 都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 Java反射机制主要提供了以下功能: a)在运行时判断任意一个对象所属的类; b)在运行时构造任意一个类的对象; c)在运行时判断任意一个类所具有的成员变量和方法; d)在运行时调用任意一个对象的方法;生成动态代理。 1. 得到某个对象的属性 public Object getProperty(Object owner, String fieldName) throws Exception { Class ownerClass = owner.getClass(); Field field = ownerClass.getField(fieldName); Object property = field.get(owner); return property; } Class ownerClass = owner.getClass():得到该对象的Class。 Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。 Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的, 这里会报IllegalAccessException。 2. 得到某个类的静态属性 1 public Object getStaticProperty(String className, String fieldName) 2 throws Exception { 3 Class ownerClass = Class.forName(className); 4 5 Field field = ownerClass.getField(fieldName); 6 7 Object property = field.get(ownerClass); 8 9 return property; 10 } Class ownerClass = Class.forName(className) :首先得到这个类的Class。 Field field = ownerClass.getField(fieldName):和上面一样,通过Class得到类声明的属性。 Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以 直接从类的Class里取。 3. 执行某对象的方法 1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { 2 3 Class ownerClass = owner.getClass(); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i < j; i++) { 8 argsClass[i] = args[i].getClass(); 9 } 10 11 Method method = ownerClass.getMethod(methodName, argsClass); 12 13 return method.invoke(owner, args); 14 } Class owner_class = owner.getClass() :首先还是必须得到这个对象的Class。 5~9行:配置参数的Class数组,作为寻找Method的条件。 Method method = ownerClass.getMethod(methodName, argsClass):通过Method名和 参数的Class数组得到要执行的Method。 method.invoke(owner, args):执行该Method,invoke方法的参数是执行这个方法的对象,和参数数组。 返回值是Object,也既是该方法的返回值。 4. 执行某个类的静态方法 1 public Object invokeStaticMethod(String className, String methodName, 2 Object[] args) throws Exception { 3 Class ownerClass = Class.forName(className); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i < j; i++) { 8 argsClass[i] = args[i].getClass(); 9 } 10 11 Method method = ownerClass.getMethod(methodName, argsClass); 12 13 return method.invoke(null, args); 14 } 基本的原理和实例3相同,不同点是最后一行,invoke的一个参数是null,因为这是静态方法, 不需要借助实例运行。 5. 新建实例 1 2 public Object newInstance(String className, Object[] args) throws Exception { 3 Class newoneClass = Class.forName(className); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i < j; i++) { 8 argsClass[i] = args[i].getClass(); 9 } 10 11 Constructor cons = newoneClass.getConstructor(argsClass); 12 13 return cons.newInstance(args); 14 15 } 这里说的方法是执行带参数的构造函数来新建实例的方法。如果不需要参数,可以直接使 用newoneClass.newInstance()来实现。 Class newoneClass = Class.forName(className):第一步,得到要构造的实例的Class。 第5~第9行:得到参数的Class数组。 Constructor cons = newoneClass.getConstructor(argsClass):得到构造子。 cons.newInstance(args):新建实例。 6. 判断是否为某个类的实例 1 public boolean isInstance(Object obj, Class cls) { 2 return cls.isInstance(obj); 3 } 7. 得到数组中的某个元素 1 public Object getByArray(Object array, int index) { 2 return Array.get(array,index); 3 }
- 浏览: 718037 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (439)
- 生活小感 (9)
- Java (65)
- 笔面经 (18)
- 算法 (45)
- 读书笔记 (1)
- Android (147)
- 设计模式 (7)
- C语言 (7)
- 职业生涯 (6)
- 网络 (5)
- 数据库 (3)
- Linux/Unix (21)
- C++ (7)
- 思考 (3)
- WinPhone (4)
- Git (6)
- http (1)
- UML (1)
- SQL (2)
- Ant (1)
- iOS (14)
- FFmpeg (22)
- WebRTC (10)
- Mac (2)
- web (0)
- TCP (2)
- Vim (2)
- OpenSSL (1)
- OpenGL (6)
- 多媒体 (10)
- cocos2d (2)
- svn (1)
最新评论
-
wahahachuang8:
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方 ...
WebSocket初探【转】 -
ding335306:
这个目录下没有找到此文件
eclipse.ini in MAC -
songshuaiyang:
哥们写东西可真乱啊
Android获取cpu和内存信息、网址的代码 -
zhoutao_temp:
这是自己能看懂还是让别人能看得懂,您就不能把版面稍微整理一下吗 ...
FFMPEG源码分析 -
chriszeng87:
string2020 写道git clone --bare表示 ...
复制git库
发表评论
-
Java Classloader机制解析
2015-07-14 14:14 803做Java开发,对于ClassLoader的机制是必须要熟悉 ... -
JVM Internals
2014-12-05 11:04 746This article explains the ... -
JVM必备指南
2014-11-01 11:20 448本文由 ImportNew - xiafei 翻译自 ant ... -
open jdk源码下载地址
2014-10-13 23:19 1087OpenJDK 和Oracle JDK 共用了大量相同的代码 ... -
Java中System.loadLibrary() 的执行过程
2014-10-10 11:45 6064转自:http://my.oschina.net/wolfc ... -
java 垃圾回收总结
2014-10-03 22:47 680转自:http://www.cnblogs.com/aigo ... -
java中volatile关键字的含义
2014-10-03 22:39 595转自:http://www.cnblogs.com/aigo ... -
java并发编程-Executor框架
2014-10-01 23:40 535Executor框架是指java 5中 ... -
Java中ArrayList和LinkedList区别
2014-09-17 18:48 533转自:http://pengcqu.iteye. ... -
深入理解Java内存模型之系列篇
2014-09-16 11:16 819转自:http://blog.csdn.net/ ... -
Java Thread 总结
2014-09-15 22:39 562转自:http://www.cnblogs.com/Drea ... -
如何停止一个正在运行的java线程
2014-09-15 22:33 1946转自:http://ibruce.info/2013/12 ... -
详解sleep和wait的区别
2014-09-15 22:16 2431转自:http://www.cnblogs.com/Dre ... -
Java多线程总结之由synchronized说开去
2014-09-14 13:11 619转自: http://hellosure.iteye.co ... -
ThreadLocal的正确用法
2014-09-13 23:52 462用法一:在关联数据类中创建private static ... -
Hashtable与ConcurrentHashMap差别
2014-09-06 00:00 873Hashtable与ConcurrentHashMap区别 ... -
JAVA多线程和并发基础面试问答
2014-09-01 22:56 638多线程和并发问题是Jav ... -
java 双重加锁及单例模式
2014-08-25 18:02 1126单例创建模式是一个通用的编程习语。和多线程一起使用时,必需使 ... -
Java内部类的使用小结
2014-08-13 21:45 535内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹 ... -
java sleep和wait的区别和联系
2014-08-10 20:46 620第一种解释: 功 ...
相关推荐
java反射机制java反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制.zipjava反射机制...
Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制Java反射机制
JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用JAVA 反射机制应用
java反射机制原理和反射机制总结!!! java反射机制原理和反射机制总结!!!
反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc反射实例-JAVA反射机制.doc...
java反射机制源码java反射机制源码java反射机制源码
Java反射机制Java反射机制Java反射机制Java反射机制
描述JAVA反射机制应用、举例。描述反射机制的具体实现及方法实现。
Java 反射机制 代码的实例 请认真阅读 运行此代码 只要读懂了 反射机制也就明白了
java反射机制和动态代理的原理,熟悉反射机制和动态代理
Java反射机制的实现_Reflection,适合学习了解反射机制。
Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档
java 反射机制深入理解,java 反射机制深入理解,java 反射机制深入理解,
这是一本关于Java反射机制论文集合的书。其中包含基本的理论及各种实例。 所有文章均从网络途径获得,本人只作收集整理的工作,个别地方有改动。每篇文章的标题遵循原作者的表述,本人不再作任何更改。 关键字有:...
候捷谈Java反射机制 有助深入理解Java新特性
Java反射机制总结(实例分析) Java反射机制学习笔记
一个例子8个demo让你了解Java反射机制
深入了解java反射机制的原理,通过反射机制可以破坏单例模式,如何防止通过反射机制拿到单例模式的构造器呢?用枚举类可破
java反射机制核心代码,小弟一直弄不明白,怎么通过反射来调用私有成员方法,看了这个后,你可以随心调用private方法,和属性,记得添加setAccessable(true),哦,要不还是不行,如:method.setAccessable(true);
java反射机制应用,文档中列举了使用java反射机制的各个应用场景,加以代码实例,使用学习非常方便。