反射的概述
类加载器(ClassLoader)
负责将类的字节码文件加载到内存中,并生成对应的Class对象
Class 对象
java.lang.Class类的对象,也叫字节码文件对象,每个Class对象对应一个字节码文件
类加载时机
1.创建类的实例
Student stu= new Student();
当程序创建了一次该类的对象时,再次创建该类的对象时,类的加载器不会再次将字节码文件加载到内存当中
2.访问类的静态成员
Calendar.getInstance*();
3.初始化类的子类
class User extends Person(){} User user = new User(); //先加载父类
4.反射方式创建的Class对象
Class clazz =Class.forName("类的正名");
正名:包名+类名,例如:cn.qq.demo.Student
获取Class对象的三种方式
Object类的getClass()方法
Class clazz =对象名.getClass();
类的静态属性
Class clazz =类名.class;
Class类的静态方法
Class clazz =Class.forName("类的正名");
三种获取Class对象的例子:
Student.java
cn.qq.demo.Student public class Student{ }
Demo.java
cn.qq.demo.Demo public class Demo{ public static void main(String[] args) throws ClassNotFoundException{ //方式一 Student stu = new Student(); Class clazz1 = stu.getClass(); //方式二 Class clazz2 = Student.class; //方式三 Class clazz3 = Class.forName("cn.qq.demo.Student"); } }
注意:一个源文件对应一个字节码文件对象