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) 是获得方法注解
标识性注解就是通过反射起作用的 通过如上方法得到注解 判断注解与谁匹配执行哪些方法
这就是反射 我们正常情况下使用类 如调用类的方法 改变属性 都能通过反射实现
|
|