zoukankan      html  css  js  c++  java
  • java反射机制(应用大于实践)

    定义:
    加载一个运行时才知道的类以及它的完整内部结构。

    Class<PeStudent> studentClass = PeStudent.class;

    API解释:
    1 Class 类的实例表示正在运行的 Java 应用程序中的类和接口。
    2 每个数组,所有具有相同元素类型和维数的数组都共享该 Class 对象。
    基本的 Java 类型(boolean、byte等)和关键字 void 也表示为 Class 对象
    3 Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

    应用:
    Class对象获取类加载器:
    ClassLoader classLoader = PeStudent.class.getClassLoader();
    常用来获取文件绝对路径:
    String path = classLoader.getResource("").toURI().getPath();

    获取的构造函数进行创建对象:
    Constructor[] constructors = PeStudent.class.getConstructors();
    PeStudent peStudents = (PeStudent) constructors[0].newInstance("11","11","11");
    System.out.println(peStudents);

    Constructor constructor = PeStudent.class.getConstructor(String.class, String.class);
    PeStudent peStudent = (PeStudent) constructor.newInstance("aa", "cc");
    System.out.println(peStudent);

    根据方法名称以及参数Class对象,获取指定的method
    Method method = PeStudent.class.getMethod("method");
    Method method = PeStudent.class.getMethod("aa", String.class);
    System.out.println(method.invoke(new PeStudent("1", "2"), "张三"));

    通过Field类给字段设置值 getField、getDeclaredField 区别前者访问公共成员,后者可以访问到所有成员
    PeStudent peStudent = new PeStudent("原值name", "age3岁");
    Field field = PeStudent.class.getDeclaredField("name");
    field.setAccessible(true); // 参数值为true,禁止访问控制检查
    field.set(peStudent, "替换name");

    isInstance 判断是否为某个类的实例
    System.out.println(PeStudent.class.isInstance(new PeStudent()));

    凌晨5点的北京你见过吗?我没有...

    共勉

  • 相关阅读:
    买点
    正则
    burp回放
    py打包问题
    运行elementUI相关组件的时候的问题
    客户端性能(转载)
    客户端性能(转载)
    关于Appium android input manager for Unicode 提示信息
    selenium 分布式 [WinError 10061] 由于目标计算机积极拒绝
    WPF数据绑定-依赖属性
  • 原文地址:https://www.cnblogs.com/shuaishuai1993/p/9343282.html
Copyright © 2011-2022 走看看