反射是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.


热爱生活,热爱程序