package com.aaron.reflect; import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; /** * Created by IntelliJ IDEA. * File: TestRef.java * User: leizhimin * Date: 2008-1-28 14:48:44 */ public class TestRef { //直接 foo.outInfo(); 也可以调用那个自定义的方法 public static void main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException { Foo foo = new Foo("这个一个Foo对象!"); //一个类的真正的对象 Class<?> clazz = foo.getClass(); // ?任意类型 Foo.class赋值给clazz也可以
Method m1 clazz.getDeclaredMethod("outInfo"); //自定义的方法,m1即是方法名 Method m2 = clazz.getDeclaredMethod("setMsg", String.class);//set方法 Method m3 = clazz.getDeclaredMethod("getMsg"); //get方法 //下面的语句输出--------这是测试Java反射的测试类 m1.invoke(foo); //不用print就可以打印消息,而且断点foo是一个确实Foo类的对象 m2.invoke(foo, "重新设置msg信息!"); //不输出 String msg = (String) m3.invoke(foo); System.out.println(msg); //重新设置msg信息! } //方法名.invoke(类的对象); } class Foo { private String msg; public Foo(String msg) { this.msg = msg; } public void setMsg(String msg) { this.msg = msg; } public String getMsg() { return msg; } public void outInfo() { System.out.println("这是测试Java反射的测试类"); } }
package com.aaron.reflect; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Demo5 { public static void main(String[] args) { Class<?> herosClass = Heros.class; //获得Class类的实例 // new herosClass() 不可以new try { // 断点里面herosClass的值是class com.aaron.reflect.Heros Method m1 = herosClass.getMethod("setName",String.class); Method m2 = herosClass.getMethod("getName"); Method m3 = herosClass.getMethod("say"); // 或者 Object userInfo = herosClass.newInstance() Heros userInfo =(Heros) herosClass.newInstance();//userInfo值并不是以前那些对象值那样 m1.invoke(userInfo,"影魔");//调用了set方法了在这里 System.out.println("调用set方法:"+userInfo);//输出[Heros [name=影魔, type=null,camp=0 ]] System.out.println("调用get方法:"+m2.invoke(userInfo));//调用get方法:影魔 m3.invoke(userInfo); // 可以调用自己的方法 } catch (Exception e) { e.printStackTrace(); } } } package com.aaron.reflect; public class Heros { private String name;//名字 private String type;//类型 private int camp;// public Heros(){} public Heros(String name, String type, int camp) { super(); this.name = name; this.type = type; this.camp = camp; } public void say(){ System.out.println("可以调用自己的方法"); } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } public int getCamp() { return camp; } public void setCamp(int camp) { this.camp = camp; } @Override public String toString() { return "Heros [ name=" + name + ", type=" + type + ", camp=" + camp + " ]"; } }