什么是反射?
- Java反射机制是在运行状态中的
- 对于任意一个类,都能够知道这个类的所有属性和方法(动态获取的信息);
- 对于任意一个对象,都能调用它的任意一个方法和属性(动态调用对象的方法)
- 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
总之就是:通过字节码文件对象,去使用该文件中的成员变量,构造方法,成员方法。
要想解剖开一个类,就必须先获取该类中的字节码文件对象,
而解剖使用的就是Class类中的方法,所以必须要先获取到每一个字节码文件对应的class类型的对象
获取class类型对象的三种方式:
类文件:
//文件
class employee{
public employee(){
System.out.println("Employee的无参数构造方法执行");
}
public employee(String name){
This.name=name;
}
};
第一种方法:
//第一种方法:forName:返回与带有给定字符串名的类或者接口相关联的class对象
public class ReflectTest{
public static void main(String[] args){
class c1=class.forName("Employee");
//c1引用保存内存地址指向堆中的对象,该对象代表的是Employee整个类
}
}
第二种方法:
//第二种方法:java中每个类型都有class属性
public class ReflectTest{
public static void main(String[] args){
class c2=Employee.class;
}
}
第三种方法:
//第三种方式: java语言中任何一个java对象都有getClass()方法
public class ReflectTest{
public static void main(String[] args){
Employee e=new Employee();
Class c3=e.getClass();//
}
}
在获取class类型的对象之后,就可以通过newInstance创建该类的对象(该类必须有无参数的构造方法):
public class ReflectTest{
public static void main(String[] args){
class c =class.forName("employee");
//创建class对象所表示的类的一个新实例
Object o=c.newInstance();//这里调用了Employee的无参数构造方法
system.out.println(o);
}
}
结果:
由结果我们可以看出,通过newInstance()方法,调用了该类的无参构造方法。
209





