什么是反射

在程序运行过程中分析类的一种能力

反射能做什么

分析类

加载并初始化一个类
查看类的所有属性和方法

查看并使用对象

查看一个对象的所有属性和方法
使用对象的任意属性和方法

应用场景

构建通用的工具
搭建具有高度灵活性和扩展性的系统框架

类加载器(ClassLoader)

负责将类的字节码文件(.class文件)加载到内存中,并生成对应的Class对象

Class对象

java.lang.Class类的对象,也叫字节码文件对象,每个Class对象对应一个字节码文件

类是加载时机

创建类的实例

Student stu = new Student();

访问类的静态成员

Calendar.getIstance();

初始化类的子类

class User extends Person{};
User user = new User();

反射方式创建类的Class对象

Class clazz = Class.forName(“类的正名”);
正名:包名+类名

获取Class对象(字节码文件)的三种方式

1.Object类的getClass方法

Class clazz = 对象名.getClass();

2.类的静态属性

Class clazz = 类名.class;

3.Class类的静态方法

Class clazz = Class.forName(“类的正名”);
正名:包名+类名

案列

  1. public class ReflectDemo {
  2. public static void main(String[] args) throws ClassNotFoundException {
  3. //需求:获取Class对象
  4. //方式一
  5. Student stu = new Student();
  6. Class clazz1 = stu.getClass();
  7. //方式二
  8. Class clazz2 = Student.class;
  9. //方式三
  10. Class clazz3 = Class.forName("Note.Student");
  11. System.out.println(clazz1==clazz2);
  12. System.out.println(clazz2==clazz3);
  13. }
  14. }