A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 海林 黑马帝   /  2011-11-7 00:13  /  1360 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

反射:
(1)        反射就是把Java类中的各种成分映射成相应的java类。
(2)        如何得到各个字节码对应的实例对象(Class类型):
  a)        类名.class;
   b)        对象.getClass();        //内存中以存在字节码。
  c)        Class.forName(“java.util.Date”);//当类内存中未存在字节码.返回与带有给定字符串名的类相关联的 Class 对象。
(3)九个预定义的Class实例对象:八个基本类型和void类型。
构造方法的反射(常用的方法):
Constructor类:代表构造方法的类。
Constructor con = String.class.getConstructor(StringBuffer.class);
//表示选择哪个构造方法。
con.newInstance(new StringBuffer(“abcd”));
//表示根据具体的参数,创建一个新实例。
常用的方法:
Constructor   getConstructor(Class<?>... par)
Constructor[]  getConstructors()
Constructor   getDeclaredConstructor(Class<?>... para)
Constructor[]  getDeclaredConstructors()
根据上面的对象创建传入指定参数的实例 newInstance(xxx,xxx,xxx)
成员变量的反射(常用的方法):
Field  getField(String name)
Field[]  getFields()
Field  getDeclaredField(String name)
Field[]  getDeclaredFields()
根据上面的对象获取传入指定对象参数的值  对像.get(obj);
如果变量是私有的,则可以将其设置成可访问形式,以便于读取。方法为:setAccessible(boolean flag)
改变某个对象上的值,方法为:set(Object obj, Object value)
成员方法的反射:
Method xxx = Class.forName(“java.lang.String”).getMethod(“方法名字”, Class类型参数);
//得到类中的某一个方法.
xxx.invoke(对象,参数);
//Method类对象调用invoke方法对指定对象,传入特定参数的方法。如果invoke方法的第一个参数为null,则调用静态方法。第二个参数如果是数组类型的话,就需要将数组再次装入Object[]中,这是因为JDK1.4没有可变参数,而是用数组形式导致的原因。new Object[]{new String[] {“1”,”2”,”3”}} 或 (Object)new String[] {“1”,”2”,”3”}这种方式是伪装成对象而不是数组了,所以不会拆包。
其他方法(常用的方法):
Method  getMethod(String name, Class<?>... parameterTypes)
Method[] getMethods()
Method  getDeclaredMethod(String name, Class<?>... parameterTypes)
Method[]  getDeclaredMethods()

评分

参与人数 1技术分 +1 收起 理由
宁超 + 1 谢谢分享。

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马