动态语言的标志

是什么

反射允许程序在运行时对任意类进行动态操作,包括:

  • 创建对象
  • 判断/调用类所具有的成员变量和方法
  • 判断对象所属的类
  • 获取泛型信息
  • 处理注解
  • 生成动态代理

方法区的Class对象类作为镜子反射出任意类的结构

三种获得Class对象的方式

  • 全限定名:Class.forName(“类的全限定名”) [ClassNotFoundException异常]

    1. Class c = Class.forName("java.lang.String");
  • Get方法:实例对象.getClass()

    1. Object o = new Object();
    2. Class c = o.getClass();
  • 类字面常量:类名.class/基本包装类型.TYPE

    1. Class clazz = int.class;
    2. Class clazz2 = Integer.TYPE;
  • 类的加载器:

    1. ClassLoader classLoader = ReflectionTest.class.getClassLoader();
    2. Class clazz = classLoader.loadClass("com.karezi.Demo");

    常用的类

  • java.lang.Class:反射的核心类,通过Class类可以获取类的属性,方法等内容信息

  • java.lang.reflect.Constructor:表示类的构造方法
  • java.lang.reflect.Field:表示类的属性,可以获取和设置类中属性的值
  • java.lang.reflect.Method:表示类的方法,可以用来获取类中方法的信息或执行方法