反射:
一个应用软件,在使用时不想让外部应用改变其内部代码,并且想使用继承该软件的接口或类,这就需要使用到反射机制。
反射机制的好处:提高了程序的可扩展性。
反射:java中可以动态获取已知类中成员的机制。 可以理解为对类的解剖。
涉及到的重要对象有Class、Filed、Method、Constructor
正常获取类的内部成员的方法就是new 一个对象,获取对象成员。
反射不同,反射是将类提取成字节码文件,然后将字节码文件进行解剖,再提取对象成员。
public class reflectDemo {
public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
getClass_1();
getClass_2();
getClass_3();
}
//反射涉及到的重要对象就是Class
//该类用于描述字节码文件。 可以将字节码文件封装成对象。
/*
如何获取一个字节码文件对象?
三种方式:
1.通过object对象中的getclass方法获取。
2.每一个数据类型都具备一个class属性,该class属性就代表一个该数据类型的class对象。
3.通过class对象中的forName方法获取一个指定类的字节码文件对象。
//获取类的字节码三种方式
*//1.
Class clazz=Class.forName("zgq.reflect.Person");
//2.
Class clazz1=new Person().getClass();
//3.
Class clazz2=Person.class;*
*/
//3.通过class对象中的forName方法获取一个指定类的字节码文件对象。
public static void getClass_3() throws Exception{
Class class1=Class.forName("bean.Student");
System.out.println(class1);
}
//2.每一个数据类型都具备一个class属性,该class属性就代表一个该数据类型的class对象。
public static void getClass_2(){
Class stu=Student.class;
Student stu1=new Student();
Class class1=stu1.getClass();
System.out.println(stu==class1);
}
//1.通过object对象中的getclass方法获取。
public static void getClass_1(){
Student stu=new Student();
Class class1=stu.getClass();
Student stu1=new Student();
Class class2=stu1.getClass();
System.out.println(class1==class2);
}
}