Java反射机制思维导图(全)

Java反射机制思维导图(全)

  1. 类加载器

    1. 概述
      当我们的程序在运行后,第一次使用某个类的时候,会将此类的class文件读取到内存,并将此类的所有信息存储到一个Class对象中,类加载器就是是负责将磁盘上的某个class文件读取到内存并生成Class的对象的。

    2. 分类
      启动/引导 类加载器(Bootstrap ClassLoader):用于加载系统类库
      扩展类加载器(Extension ClassLoader):用于加载扩展类库/
      JDK9之后变成PlatformClassLoader,平台类加载器
      应用程序类加载器(Application ClassLoader):用于加载我们自定义类的加载器
      3.双亲委派机制
      模型

      好处
      Java中类加载到内存是分层次的。例如:系统类库中的类 java.lang.Object。无论哪一个类加载器要加载这个类,最终都是委派给处于顶端的"启动类加载器"进行加载,因此 java.lang.Object类在程序的各种类加载器环境中都是同一个类。不会出现随便定义上帝类的弊端

  2. 反射机制

    1. 概述
      反射是一种机制,利用该机制可以在程序运行过程中对类进行解剖并操作类中的所有成员(成员变量,成员方法,构造方法)
      使用场景
      开发IDE(集成开发环境),比如IDEA,Eclipse
      各种框架的设计和学习 比如Spring,Hibernate,Struct,Mybaits…
    2. 获取Class对象
      方式1: 通过类型名.class获得
      方式2:通过对象名.getClass()方法获得
      方式3:通过Class类的静态方法获得: static Class forName(“类全名”)
      Class中的一些方法
      getName
      getSimpleName
      newInstance
      需要有可访问的无参构造方法
    3. 反射获取构造方法并使用
      Class获取构造器Constructor对象
      获取指定构造器
      1. Constructor getConstructor(Class…
      parameterTypes)
      根据参数类型获得对应的
      只能获得public修饰的构造方法
      2. Constructor getDeclaredConstructor(Class… parameterTypes)
      根据参数类型获得对应的Constructor对象
      可以是public、protected、(默认)、private修饰符的构造方法
      获取多个构造器
      3. Constructor[] getConstructors()
      获得类中的所有构造方法对象,只能获得public的
      4. Constructor[] getDeclaredConstructors()
      获得类中的所有构造方法对象,可以是public、protected、(默认)、private修饰符的构造方法。
      Constructor对象常用方法
      1. T newInstance(Object… initargs)
      根据指定的参数创建对象,类型和个数,顺序一定要匹配
      2. void setAccessible(true)
      设置"暴力反射"——是否取消权限检查,true取消权限检查,false表示不取消
    4. 反射获取成员发方法并使用
      Class获取方法Method对象
      1. Method getMethod(String name,Class…args);
      2.Method getDeclaredMethod(String name,Class…args);
      3.Method[] getMethods();
      4.Method[] getDeclaredMethods();
      使用Method
      Object invoke(Object obj, Object… args)
      obj:调用方法所使用的对象,如果是静态方法可以传入null
      args:调用方法时传递的参数
      返回值就是当前方法执行返回的结果,如果是void方法固定返回null
      void setAccessible(true)
      设置"暴力访问"——是否取消权限检查,true取消权限检查,false表示不取消
    5. 反射获取成员变量并使用
      Class获取属性Filed对象
      Field getField(String name);
      Field getDeclaredField(String name);
      Field[] getFields();
      Field[] getDeclaredFields();
      Filed常用方法
      设置值
      void set(Object obj, Object value)
      void setInt(Object obj, int i)
      void setLong(Object obj, long l)
      void setBoolean(Object obj, boolean z)
      void setDouble(Object obj, double d)
      获取值
      Object get(Object obj)
      int getInt(Object obj)
      long getLong(Object obj)
      boolean getBoolean(Object ob)
      double getDouble(Object obj)
      void setAccessible(true);暴力反射,设置为可以直接访问私有类型的属性。
      Class getType(); 获取属性的类型,返回Class对象。

相关文章:

  • 2022-12-23
  • 2021-12-06
  • 2021-07-03
  • 2021-05-14
猜你喜欢
  • 2022-12-23
  • 2022-02-16
  • 2022-02-20
  • 2021-10-05
  • 2021-11-18
  • 2021-07-24
相关资源
相似解决方案