反射的定义 一个java类中的各种成分映射成相应的java类
通过反射可以强取其他实例的私有变量、
eg
ReflectPoint pt1 = new ReflectPoint(3, 5);
Field fieldY = pt1.getClass().getField("y");
// fieldY的值是多少?是5,错!fieldY不是对象身上的变量,而是类上,要用它去取某个对
象上对应的值
System.out.println(fieldY.get(pt1));
Field fieldX = pt1.getClass().getDeclaredField("x");//强取
如何获得那个类的字节码对
1类名。class
eg person.class system.class
2实例。getClass
eg new Date().getClass()
3.Class.forName("类")
eg Class.forName("java.util.Date")
Class 也可以理解为那个类的字节码 注意是Class 那个类
通过反射可以强取其他实例的私有变量、
eg
ReflectPoint pt1 = new ReflectPoint(3, 5);
Field fieldY = pt1.getClass().getField("y");
// fieldY的值是多少?是5,错!fieldY不是对象身上的变量,而是类上,要用它去取某个对
象上对应的值
System.out.println(fieldY.get(pt1));
Field fieldX = pt1.getClass().getDeclaredField("x");//强取
fieldX.setAccessible(true);//强取
System.out.println(fieldX.get(pt1));
eg//字节码 用 == (这里面试官可能不知道 你加上注释啊,怕别人不知道被冤枉 加注释)
private static void changeStringValue(Object obj) throws Exception {
Field[] fields = obj.getClass().getFields();
for (Field field : fields) {
// if(field.getType().equals(String.class)){
if (field.getType() == String.class) {
String oldValue = (String) field.get(obj);
String newValue = oldValue.replace('b', 'a');
field.set(obj, newValue);
}
}
}
如何获得那个类的字节码对
1类名。class
eg person.class system.class
2实例。getClass
eg new Date().getClass()
3.Class.forName("类")
eg Class.forName("java.util.Date")
Class 也可以理解为那个类的字节码 注意是Class 那个类