栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java反射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java反射

  • 廖雪峰Java反射

  • Class类

    • JVM为每个加载的类及接口创建了对应的Class实例来保存类及接口的所有信息;

      • Class类

        • public final class Class {
              private Class() {}
          }
          
      • 以String类为例,当JVM加载String类时,它首先读取String.class文件到内存,然后,为String类创建一个Class实例并关联起来

        • Class cls = new Class(String);
        • JVM持有的每个Class实例都指向一个数据类型(class或interface)
    • 通过Class实例获取class信息的方法称为反射(Reflection);

      • 获取

        • Class cls = String.class;
        • String s = "Hello"; Class cls = s.getClass()
        • Class cls = Class.forName("java.lang.String");
      • Class实例在JVM中是唯一的

      • 实例化

        • // 获取String的Class实例:
          Class cls = String.class;
          // 创建一个String实例:
          String s = (String) cls.newInstance();
          
    • JVM总是动态加载class,可以在运行期根据条件来控制加载class。

  • 访问字段

    • 访问Field: getFiled()
    • 访问字段信息:getName(), getType()…
    • 调用setAccessible(true)来访问非public字段
    • 通过反射读写字段是一种非常规方法,它会破坏对象的封装。
  • 访问调用方法

    • getMethod()
    • getNmae()
    • 通过Method实例可以调用某个对象的方法:Object invoke(Object instance, Object... parameters);
    • 通过设置setAccessible(true)来访问非public方法;
  • 构造方法

    • Constructor对象封装了构造方法的所有信息;
    • 通过Class实例的方法可以获取Constructor实例:getConstructor(),getConstructors(),getDeclaredConstructor(),getDeclaredConstructors();
    • 通过Constructor实例可以创建一个实例对象:newInstance(Object... parameters);
    • 通过设置setAccessible(true)来访问非public构造方法。
  • 获取继承关系

    • Class getSuperclass():获取父类类型;
    • Class[] getInterfaces():获取当前类实现的所有接口。
  • 动态代理

    • 动态代理是通过Proxy创建代理对象,然后将接口方法“代理”给InvocationHandler完成的。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/333110.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号