java反射----类方法提取
2015-11-11 11:01
197 查看
一、首先说反射
在 Java 1.1 中, Class 类(本章前面已有详细论述)得到了扩展,可以支持“反射”的概念。针对 Field,
Method 以及 Constructor 类(每个都实现了 Memberinterface—— 成员接口),它们都新增了一个库:
java.lang.reflect。这些类型的对象都是 JVM 在运行期创建的,用于代表未知类里对应的成员。这样便可用
构建器创建新对象,用 get()和 set()方法读取和修改与 Field 对象关联的字段,以及用 invoke()方法调用
与 Method 对象关联的方法。此外,我们可调用方法 getFields(), getMethods(), getConstructors(),分
别返回用于表示字段、方法以及构建器的对象数组(在联机文档中,还可找到与Class 类有关的更多的资
料)。因此,匿名对象的类信息可在运行期被完整的揭露出来,而在编译期间不需要知道任何东西。
大家要认识的很重要的一点是“反射”并没有什么神奇的地方。通过“反射”同一个未知类型的对象打交道
时, JVM 只是简单地检查那个对象,并调查它从属于哪个特定的类(就象以前的 RTTI 那样)。但在这之后,
在我们做其他任何事情之前, Class 对象必须载入。因此,用于那种特定类型的.class 文件必须能由 JVM 调用(要么在本地机器内,要么可以通过网络取得)。所以
RTTI 和“反射”之间唯一的区别就是对 RTTI 来
说,编译器会在编译期打开和检查.class 文件。换句话说,我们可以用“普通”方式调用一个对象的所有方
法;但对“反射”来说, .class 文件在编译期间是不可使用的,而是由运行期环境打开和检查。(摘录java编程思想)
二、类方法提取
Object
tvalue = (Object)product.getClass().getMethod(methodName).invoke(product); //例子
上面语句就是利用method的invoke方法获取对应method的值。
在 Java 1.1 中, Class 类(本章前面已有详细论述)得到了扩展,可以支持“反射”的概念。针对 Field,
Method 以及 Constructor 类(每个都实现了 Memberinterface—— 成员接口),它们都新增了一个库:
java.lang.reflect。这些类型的对象都是 JVM 在运行期创建的,用于代表未知类里对应的成员。这样便可用
构建器创建新对象,用 get()和 set()方法读取和修改与 Field 对象关联的字段,以及用 invoke()方法调用
与 Method 对象关联的方法。此外,我们可调用方法 getFields(), getMethods(), getConstructors(),分
别返回用于表示字段、方法以及构建器的对象数组(在联机文档中,还可找到与Class 类有关的更多的资
料)。因此,匿名对象的类信息可在运行期被完整的揭露出来,而在编译期间不需要知道任何东西。
大家要认识的很重要的一点是“反射”并没有什么神奇的地方。通过“反射”同一个未知类型的对象打交道
时, JVM 只是简单地检查那个对象,并调查它从属于哪个特定的类(就象以前的 RTTI 那样)。但在这之后,
在我们做其他任何事情之前, Class 对象必须载入。因此,用于那种特定类型的.class 文件必须能由 JVM 调用(要么在本地机器内,要么可以通过网络取得)。所以
RTTI 和“反射”之间唯一的区别就是对 RTTI 来
说,编译器会在编译期打开和检查.class 文件。换句话说,我们可以用“普通”方式调用一个对象的所有方
法;但对“反射”来说, .class 文件在编译期间是不可使用的,而是由运行期环境打开和检查。(摘录java编程思想)
二、类方法提取
Object
tvalue = (Object)product.getClass().getMethod(methodName).invoke(product); //例子
上面语句就是利用method的invoke方法获取对应method的值。
相关文章推荐
- Java的几种对象(POJO,PO,DTO,VO,DAO)
- Java 进行 RSA 加解密时不得不考虑到的那些事儿
- 在Myeclipse中配置Maven
- 《深入理解Java虚拟机》学习笔记之垃圾收集器总结
- TIOBE 2015年11月编程语言排行榜 2009年7月以来Java再次超20%
- java 等比压缩图片文件
- java多线程学习心得
- java实现单例模式
- 第一章:Dubbo整合maven+spring+springmvc+mybatis之环境准备
- java noi读取文件
- java Math的round,floor,ceil,IEEEremainder 方法总结
- java实现短信验证码
- 关于java中double类型的比较大小的问题
- Java学习篇之---struts(一)
- Spring中如何配置Hibernate事务
- java poi复习
- SpringMVC多语言配置
- Twitter的分布式自增ID算法snowflake (Java版)
- 【知识】Eclipse中搜索的使用
- java 重载和重写的区别