|---定义:就是把java类中的各种成分映射成相应的java类,说白了就是获得一个类里面的成员
|---获取字节码的方法:1,类名.class(System.class) 2,对象.getClass() 3,Class.forName("类名 比如java.util.Data")
|---反射是为了实现(代码自己看):1,在运行时判断任意一个对象所属的类。2,在运行时构造任意一个类的对象。
3,在运行时判断任意一个类所具有的成员变量和方法。4,在运行时调用任意一个对象的方法
|---反射与内省区别?
反射可以操作各种不同的java类,那么内省只是通过反射来操作JavaBean的。JavaBean类里面操作的都是成员变量,都是通过setXXX和getXXX方法
来获取成员变量,这样的类用内省来操作会更简单。
|---反射及暴力反射 ,获得私有方法代码(这里用到反射)
暴力反射:类里面的变量私有了,通过普通的getField反射方法无法获得,只能通过getDeclaredField()获得
代码:package day_7_15;
import java.lang.reflect.Field;
class ReflectPoint{
private int x ,y;
ReflectPoint(int x ,int y){
this.x=x;
this.y=y;
}
}
public class ViolenceReflectDemo {
public static void main(String[] args) throws Exception, Exception{
ReflectPoint point = new ReflectPoint(3,5);
//field类代表某个类中的成员变量,这里是私有变量只能通过暴力反射的方法获得,getDeclaredField()方法
Field field = point.getClass().getDeclaredField("y");//得到了方法看不见方法,需要判断
//通过方法看见了,但是拿不到
field.setAccessible(true);
//y这个还有变量y的变量类对象来获取对象里的y ,拿到了变量
System.out.println(field.get(point));
}
}
|
|