1. 什么是反射
反射可以动态获取类信息并创建对象、执行方法、属性赋值等,通过反射,我们就可以通过字节码文件反推得到源代码。
2.反射怎么用
2.1 在使用反射前,我们需要介绍4个类,分别是java.lang.Class、java.lang.reflect.Constructor、java.lang.reflect.Method以及java.lang.reflect.Field。因为对于一个字节码文件来说,其实就是一个类(先不考虑接口、数组等对象),一个类则主要是4部分:类信息、属性、构造器和方法。所以当我们拥有了这4个类,也就可以通过字节码来进行操作了。需要被反射的类如下所示。
class Reflect{
static{
System.out.println("static code seg\n");
}
private int no;
private String name;
public Reflect(){
System.out.println("no param constructor\n");
}
public Reflect(int no){
this.no = no;
System.out.println("int constructor: " + no + "\n");
}
public Reflect(int no, String name){
this.no = no;
this.name = name;
System.out.println("int--String constructor: " + no + name + "\n");
}
private void sout(){
System.out.println("out");
}
public int testInt(int i, String s){
System.out.println("testInt be invoked: " + i + " " + s);
return 20;
}
public String testString(double i, boolean b){
System.out.println("testString Be invoked");
return