java反射在java的学习中是一个比较难理解的技术.举个例子可以更加清楚的说明:
先写一个User类:
package nit.system.check; import java.lang.reflect.Constructor; import java.lang.reflect.Method; /** * @author geekwang * */ class User{ private String userName; private String address; public User(){ } public User(String userName,String address){ this.userName=userName; this.address=address; } public void write(){ System.out.println("userName:"+userName); System.out.println("address:"+address); } }
上面是一个很普通的类,有userName和address两个属性,还有打印用户姓名和地址的write方法.
接下来就是用反射技术来实现对User的应用.这样的话,我们就可以很轻松的把类,属性以及方法从客户端的代码中抽取出来,可以放在配置文件中读取到客户端进行调用,也就很大程序上减少了耦合,事实上目前的很多框架也是这么做的.
public class ReflectTest { public static void main(String args[]) throws Exception{ Class c=Class.forName("nit.system.check.User"); //由类得到构造函数 Constructor constructor=c.getConstructor(new Class[]{Class.forName("java.lang.String"),Class.forName("java.lang.String")}); //由构造函数得到对象 Object obj=constructor.newInstance(new Object[]{"geekwang","ningbo"}); //由类得到方法 Method method=c.getMethod("write", new Class[]{}); //方法调用对象,反射 method.invoke(obj, new Object[]{}); //等同于如下代码 User print=new User("geekwang","ningbo"); print.write(); } }