您的位置:首页 > 编程语言 > Java开发

java中利用反射实现的几个小示例

2015-02-08 17:45 337 查看
上篇文章中我简单介绍了在java中使用反射机制的几个常用的方式和方法。现在我们就以实际应用来拓展下使用反射机制,我会通过两个小题目来演示关于反射的实际应用。

(1)将任意一个对象中的所有String类型的成员变量所对应的字符串内容中的“h”替换成"a"。

其实这道题目很简单,要将一个类的所有成员变量为String类型的,并且字符串中包含“h”的要替换成"a"。

此处要获取所有成员变量,就要调用Class对象getFields()方法,此方法返回的是一个Field数组。然后再遍历该数组,并逐个判断成员变量类型是否为String类型,如果是,就获取其中的值,并调用replace方法进行替换操作,最后再将替换后的值重新设置到成员变量中。



(2)如何通过反射调用一个类的main方法。

既然是调用某个类的方法,就需要使用Method类。

首先要通过Class对象的getMethod(String name,Class<?>parameters)方法来获取代表方法的类对象。然后通过Method对象的invoke(Object obj,Object...objs)方法来调用该方法。此时要注意invoke方法的参数,因为main方法是静态的,所以invoke中的第一个参数应该是null,即不属于任何一个对象,是属于类的。

第二个参数不能直接传入一个String数组。因为在jdk1.4之前,此处是把String数组打散后传入的,会将打散后的值作为参数,此时如果直接传入String数组就会抛出 wrong number of arguments的异常。在JDK1.5以上版本中就升级过来。但是JDK会适应1.4的版本,所以需要先将String数组强制转换为一个Object,然后再传入,就完全正确了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: