反射

此文章已于 10:49:32 2008-11-26 发布到 chandlersong的个人空间

反射

 

 

类别                    Java 技术

 

对反射概念的形成是源自于《大话设计模式》这本书,这本书使用.NET来写的。讲反射是因为说明通过反射可以用一个String的区别,就可以实例化不同的类。也就因此,我对于反射的映像就是用来这个的。

最近在看《core java》这本书,对反射有了一定的认识。其实反射,最简单的应用是分析类。基本涉及的几个类是langClass<T>,以及java.lang.reflect包下的几个类。

Java.lang.reflect包下的类名都很好理解,看看API就能明白。这里就是OO的思想的体现了,在探索类名的时候,被探索的方法,成员这些都被分装入一个一个类中,以方便的使用。

接下来,是如果用反射来实例化一个对象的方法。

       

  1.     public static void main(String[] args) throws ClassNotFoundException, SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException  {
  2.           Class<?> cls;
  3.           Constructor<?> cons;
  4.           cls = Class.forName("java.lang.String");                     //确定类名
  5.           Class<?>[] argclass = new Class[1];                          //参数名称数组
  6.           argclass[0]= Class.forName("java.lang.String");              //参数类名
  7.           Object[] arg = new Object[1];                                //参数数组
  8.           arg[0] = "success";                                          //参数
  9.           cons = cls.getConstructor(argclass);                         //传入参数类名
  10.           String a = (String)cons.newInstance(arg);                    //传入参数,并且实例化
  11.           System.out.println(a);                                       //打印
  12.     }

 

 整段代码是这样来进行的。首先,实例化一个Class对象和Constructor对象,分别代表你要实例化的对象以及其构造函数。如果说你要实例化的对象的构造函数是没有参数的。那么直接cls.newInstance()就可以了。

然后就是确定你要实例化类的构造函数到底用哪一个了。构造函数只是一个比较特殊的函数。而在java中区别方法的通过区别方法名和参数类型来确定的。构造函数的方法名确定了。那么接下来就是通过参数类型了。这里,装载参数类型的数组就是argClass(因为我用的String有一个String为参数的构造函数,所以这里的数组只有一项)。

 接下来,就是调用cons的产生对象的方法,并且把参数数组arg传入进去了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值