【动力节点 Java进阶学习笔记】第八章 反射机制

【动力节点 Java进阶学习笔记】第八章 反射机制

      • 1、什么是反射机制、反射机制的作用和相关的类
      • 2、获取Class的三种方式、通过获取的Class实例化对象、获取文件的绝对路径
      • 3、类加载器的概念、分类以及双亲委派机制
      • 4、通过反射机制反射属性、如何读取和修改属性值
      • 5、通过反射机制反射方法、如何调用对象的某个方法
      • 6、通过反射机制反射构造方法、如何调用构造方法实例化对象
      • 7、通过反射机制获取父类以及父类型接口

1、什么是反射机制、反射机制的作用和相关的类

  • 反射机制:可以操作字节码文件
  • 作用:可以让程序更加灵活。
  • 相关类:
           java.lang.Class:代表整个字节码,代表一个类型,代表整个类。
           java.lang.reflect.Method:代表字节码中的方法字节码。代表类中的方法。
           java.lang.reflect.Constructor:代表字节码中的构造方法字节码。代表类中的构造方法
           java.lang.reflect.Field:代表字节码中的属性字节码。代表类中的成员变量(静态变量+实例变量)。

2、获取Class的三种方式、通过获取的Class实例化对象、获取文件的绝对路径

  • 获取Class的三种方式
           Class.forName()
           <对象>.getClass()
           xxx.class(如int.class;String.class)
  • 通过获取的Class实例化对象:newInstance()
           newInstance()底层调用的是该类型的无参数构造方法。
  • 获取绝对路径
           Thread.currentThread.getContextClassLoader.getResource().getPath()
  • 获取文件流
           Thread.currentThread.getContextClassLoader.getResourceAsStream()
  • 资源绑定
           ResourceBundle bundle =ResourceBundle.getBundle()
           这个文件必须在类路径下(src路径下),文件扩展名也必须是properties,并且在写路径的时候,路径后面的扩展名不能写。
           获取value:bundle.getString()

3、类加载器的概念、分类以及双亲委派机制

  • 启动类加载器 : rt.jar

  • 扩展类加载器 : ext/*.jar

  • 应用类加载器 : classpath

  • java中为了保证类加载的安全,使用了双亲委派机制
           优先从启动类加载器中加载,这个称为“父”
           “父”无法加载到,再从扩展类加载器中加载,这个称为“母”。双亲委派。
            如果都加载不到,才会考虑从应用类加载器中加载,直到加载到为止。

4、通过反射机制反射属性、如何读取和修改属性值

  • 获取所有Field: .getDeclaredFields()
  • 获取属性的修饰符:Modifer.toString(.getModifiers())
  • 获取属性的数据类型.getType().getSimpleName()
  • 获取属性的数据名称.getName()
  • 给obj对象的某个属性赋值.set(,)
           赋值三要素:对象、属性、值
  • 读取obj对象的属性值: .get()
  • 私有属性无法直接读取,需要打破封装.setAccessible(true)
  • 5、通过反射机制反射方法、如何调用对象的某个方法

    • 可变长度参数:类型… 变量名; 如m1(int… args)
    • 获取所有Method: .getDeclaredMethods()
    • 获取方法的修饰符:Modifer.toString(.getModifiers())
    • 获取方法的返回值.getReturnType().getSimpleName()
    • 获取方法名.getName()
    • 获取方法的形参列表:Class[] .getParametersTypes()
                                          .getSimpleName()
    • 通过反射机制调用对象的某个方法
             获取指定方法.getDeclaredMethod(<方法名>, Class… parameterTypes)
                                  如(login, String.class, String.class)
             调用方法:Object obj = .invoke(obj, Class… parameterTypes)

    6、通过反射机制反射构造方法、如何调用构造方法实例化对象

    • 获取constuctor:Constructor[] .getDeclaredConstructors();
    • 获取修饰列表:Modifer.toString(.getModifiers())
    • 获取方法名.getName() 或 .getSimpleName()
    • 获取形参列表:Class[] .getParameterTypes()
    • 调用构造方法
             .getDeclaredConstructor(Class… parameterTypes)
              .newInstance(Class… parameterTypes)

    7、通过反射机制获取父类以及父类型接口

    • 获取父类.getSuperclass()
    • 获取实现的接口:Class[] .getInterfaces()

    你可能感兴趣的:(Java学习,java,学习,开发语言)