反射
反射机制:
当一个类被加载进内存后,都会相应的有一个字节码文件(里面有类的信息)对象,我们去剖析这个类的的构成,还能调用该类中的功能,想要通过反射去调用类中的功能和属性,那必须先要得到,该类对应的字节码文件对象(Class)
获取换一个类的字节码文件对象的三种方式:
方式1:
通过Object类中的 getClass();
Student student = new Student();
Class aClass = student.getClass();
方式2:
每个类都有一个class 静态属性
Class studentClass = Student.class;
方式3:
通过 Class 类中的一个静态方法来获取
static Class<?> forName (String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。通过一个类的全路径,就可以获取到该类的字节码文件对象
类的全路径: 该类带有包名的写法 例如: org.westos.demo2.Student 一个类全路径的写法
Class<?> aClass3 = Class.forName("org.westos.demo2.Student");
System.out.println(aClass3== studentClass);
随便建一个学生类
public class Student {
}
测试类
public class MyDemo {
public static void main(String[] args) throws Exception {
//方式1:通过Object类中的 getClass()
Student student = new Student();
Class aClass = student.getClass();
Class aClass1 = student.getClass();
System.out.println(aClass);
System.out.println(aClass==aClass1);
Student student2 = new Student();
Class aClass2 = student2.getClass();
System.out.println(aClass1==aClass2);
//方式2,每个类都有一个class 静态属性
Class studentClass = Student.class;
System.out.println(studentClass==aClass);
//方式3:通过 Class 类中的一个静态方法来获取
Class<?> aClass3 = Class.forName("org.westos.demo2.Student");
System.out.println(aClass3== studentClass);
}
}
类的构成:
成员方法,Method
构造方法 Constructor
成员变量 Field
使用反射剖析一个类
我们要使用反射去剖析一个类,必须先获取到该类所对应的字节码文件对象;
1.获取该类的字节码文件对象
Class clazz = Class.forName("org.westos.demo3.Student");
2.研究构造方法 那我们就得得到构造方法的对象
//A:
//获取所有构造方法
//public Constructor<?>[] getConstructors () 获取所有的构造方法不包含私有的
//public Constructor<?>[] getDeclaredConstructors () 获取所有的构造方法 包括私有的
//B:
//获取单个构造方法
//public Constructor<T>