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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 无奈的我+.l 中级黑马   /  2014-3-19 16:50  /  1316 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1.反射 就是像复制一样 比如反射调用类的方法 其实是复制一个跟原来的类一摸一样的类 调用复制类的方法
实例 String str = new String("你好"); 这段代码生成了一个String 实例 但用反射怎么做呢

步骤1.先得到class对象 String.class new String().getClass() Class.forName("java.lang.String")
步骤2 得到constructor 如果构造方法中没有参数则可以省略这步 Constructor cons = cla.getConstructor(String.class);
步骤3生成实例String str = (String) cons.newInstance("abcdefgh");

还可以通过反射得到属性与调用方法 Field 类 与 Method类
1.属性
Field[] fs = cla.getDeclaredFields(); 可以得到所有属性 包括private的
但得到属性不一定让访问 如果想访问就得设置f.setAccessible(true); 这样就可以访问private的属性了
for(Field f:fs){
if(f.getType() == String.class){
f.setAccessible(true);
String oldValue = (String) f.get(p);
System.out.print(oldValue);
String newValue = oldValue.replace('b', 'a');
System.out.println(newValue);
f.set(p, newValue);
}
}
2.方法调用
String str = "abcdefg";
Method m = String.class.getMethod("charAt", int.class);
System.out.println(m.invoke(str, 1));

getAnnotation(Class<T> annotationClass) 是获得方法注解
标识性注解就是通过反射起作用的 通过如上方法得到注解 判断注解与谁匹配执行哪些方法


这就是反射 我们正常情况下使用类 如调用类的方法 改变属性 都能通过反射实现

0 个回复

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