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,然后再传入,就完全正确了。
(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,然后再传入,就完全正确了。
相关文章推荐
- java利用反射实现动态代理示例
- 利用java反射实现Java Bean 类型转换
- 利用Java的反射与代理机制实现AOP
- java利用反射模式调用实现类
- 利用Java的反射与代理实现IOC模式
- 一个利用反射来实现扩展的小程序示例
- 利用Java的反射与代理实现IOC模式
- 利用java的反射实现IOC
- 利用Java的反射与代理机制实现IOC
- 利用Java反射实现普通对象到JSONObject的转换
- 利用Java的反射实现spring的IOC(推荐!!!)
- 利用java的反射原理实现数据注入功能
- JAVA利用反射模式调用实现类
- 利用Java Reflection(反射)原理,在hibernate里面实现对单表、视图的动态组合查询
- 利用Java的反射与代理实现AOP(推荐!!!)
- Qt4中利用Meta Object实现类拟.NET和Java的反射(Reflection)功能
- 利用Java的反射与代理机制实现AOP
- java使用dom4j解析xml配置文件实现抽象工厂反射示例
- java中利用反射机制实现调用给定为字符串的方法名
- java程序利用HttpSessionListener实现统计在线人数(示例代码)