Java反射之Method调用和Filed设置
2010-01-24 14:13
459 查看
反射是java的一个高级特性。
Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Serializable),也包括fields和methods 的所有信息,并可于运行时改变fields内容或调用methods。
反射就是给应用程序一个可以检查自己和运行环境的一个路径。自己信息的替代—MetaData.
入门级别先看看如果通过反射调用方法和设置成员变量的值:
1.通过反射设置变量值
2.调用反射调用方法
Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Serializable),也包括fields和methods 的所有信息,并可于运行时改变fields内容或调用methods。
反射就是给应用程序一个可以检查自己和运行环境的一个路径。自己信息的替代—MetaData.
入门级别先看看如果通过反射调用方法和设置成员变量的值:
1.通过反射设置变量值
import java.lang.reflect.Field; /** * 反射修改Field * * @author yblin */ public class RefField { public String color; public Double number; public static void main(String args[]) { try { Class c = RefField.class; Field colorField; colorField = c.getField("color"); Field numberField = c.getField("number"); RefField obj = new RefField(); colorField.set(obj, "blue"); System.out.println("color=" + colorField.get(obj)); numberField.set(obj, 2.1); System.out.println("number=" + numberField.get(obj)); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
2.调用反射调用方法
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 反射方法调用。 * * @author yblin */ public class RefMethod { private String color; public void printColor() { System.out.println("color is:" + color); } public RefMethod(String color) { this.color = color; } public void sayHello(String name, Integer age) { System.out.println("Hello world," + name + "!" + "The age is:" + age); } public static void main(String args[]) { Class cls = RefMethod.class; RefMethod ref = new RefMethod("blue"); try { Method sayHello = cls .getMethod("sayHello", new Class[] { String.class, Integer.class });//寻找具有String参数和Integer参数的sayHello方法。 Method printColor = cls.getMethod("printColor", null); try { sayHello.invoke(ref, new Object[] { "ant", 3 });//通过Mechod对象的invoke调用来调用方法 printColor.invoke(ref, null); } catch (IllegalArgumentException e) {//无效参数 // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) {//无权访问 // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- Java反射之Method调用和Filed设置
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- Java中反射调用私有方法出现NoSuchMethodException
- 利用反射函数实现一键清除缓存,并获取清除的缓存数目。调用反射函数类出错java.lang.NoSuchMethodException: getPackageSizeInfo.
- 【java】之Method和Field反射获取和设置属性值
- Java 反射 Method的invoke回调调用任意方法
- java反射Method中的如何调用任意方法,即invoke()的使用
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- java反射-反射调用方法、设置属性内容
- 使用java反射中的getMethod,invoke方法调用对象方法的实例
- java中通过反射获取方法并且调用(getMethod和invoke深入)实践
- 比FastMethod更快的Java反射调用API,以及比Cglib更快的BeanMap实现
- java反射获取字段以及获取字段值和设置字段值
- 关于java为什么在Method中局部内部类或者匿名内部类调用Method中定义的变量要用final修饰?
- 提高java反射速度的方法method.setAccessible(true)
- 通过Java反射调用方法 http://blog.csdn.net/ichsonx/article/details/9108173
- Java:反射构造的调用
- 通过Java反射调用方法
- java 反射调用支付SDK
- Java基础--反射Reflect----Method