反射是Java框架的灵魂,在java 基础学习中非常重要。

什么是反射?

反射指的是它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。

如何获取Class类对象?

有三种方式获取Class类对象

  1. 对象名称.getClass()
//1. 对象.getClass(),多用于对象的获取字节码的方式
        Person p = new Person();
        Class cls3 = p.getClass();
        System.out.println(cls3);//class top.lukeewin.demo19domain.Person
  1. 直接调用静态属性class
//2. 类名.class,多用于参数的传递
        Class cls2 = Person.class;
        System.out.println(cls2);//class top.lukeewin.demo19domain.Person
  1. 调用forName(“类的全路径”)
//3. Class.forName("类的路径"),多用于配置文件
        Class cls1 = Class.forName("top.lukeewin.demo19Reflect.Person");
        System.out.println(cls1);//class top.lukeewin.demo19domain.Person

反射中的作用

获取成员变量们

  1. Field field = cls.getField(String name)
  2. Field[] fields = cls.getFields()
  3. Field declaredField = cls.getDeclaredField(String name)
  4. Field[] declaredFields = cls.getDeclaredFields()

获取构造方法们

  1. Constructor<?>[] getConstructors()
  2. Constructor getConstructor(类<?>… parameterTypes)
  3. Constructor getDeclaredConstructor(类<?>… parameterTypes)
  4. Constructor<?>[] getDeclaredConstructors()

获取成员方法们

  1. Method[] getMethods()
  2. Method getMethod(String name, 类<?>…parameterTypes)
  3. Method[] getDeclaredMethods()
  4. Method getDeclaredMethod(String name, 类<?>…parameterTypes)

获取类名

  1. String getName()

Field

  1. 设置值
    void set(Object obj, Object value)
  2. 获取值
    get(Object obj)
  3. 忽略访问控制权限
    setAccessible(true)

Constructor

  1. 创建对象
    newInstance(Object...initarges)
    如果创建的是空对象,可以直接使用Class类中的newInstance()方法

Method

  1. 执行方法
    Object invoke(Object obj, Object...args)

获取类名

String getName()

Q.E.D.


热爱生活,热爱程序