java反射技术说明
????? 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();}}
?
1 楼 congjl2002 2008-07-21 直接new出来不好吗? 2 楼 wuhua 2008-07-21 哈哈。new是可以,不过有很多时候还是需要这种技术来做动态语言的效果的 3 楼 laogao3232 2008-07-21 反射就这么简单,曾经看了一篇讲解的,太长,太复杂。这个好。