zoukankan      html  css  js  c++  java
  • Java反射

    通过反射获取Class对象的三种方法对应java代码在计算机中的三个阶段:

    1. 源代码阶段:这个时候java文件和class文件还存储在硬盘中,未加载到内存,想要获取这个Class需要使用Class.forName("全类名")进行加载;

      (参数为字符串,多用于配置文件,读取文件加载类)

    2. 当一个类已经被加载到内存中了,可以使用 “类名.class” 获取;

      (多用于参数的传递)

    3. 当一个类被加载到内存中并且被实例化了,就可以调用对象的 “getClass()” 方法获取Class。

      (多用于对象的获取字节码的方式)

    重要结论:

    1. 同一个(*.class)文件在一次程序运行过程中,只会被加载一次,使用三种方式获取到的Class对象均为一个Class对象。

    获取Field:

    • class.getFields() & class.getDeclaredFields();也可以获取指定名称的Field;
    • field.get(obj) & field.set(obj,value);获取或者设置field的值,传入的obj指定一个对象;注意在获取private修饰的field时要先设置:field.setAccessible(true);

    获取Constructor:

    • class.getConstructor(...),例如:

      Constructor constructor = personClass.getConstructor(String.class, int.class);
      //使用有参构造器构造对象
      Object obj=constructor.newInstance("name",23);
      
    • 当然也可以获取无参构造,并通过无参构造生成对象,不过建议直接使用Class的newInstance()方法。

      Object o = personClass.newInstance();
      
    • 注意,和Field一样,也有declared与setaccessible相关特性

    获取Method

    • class.getMethod()
    • class.getMethods()
    • method.invoke(obj,arg) //执行方法,obj为方法载体,arg为方法参数
    • 也有declared与setaccessible相关特性
  • 相关阅读:
    性能测试方案和用例模板
    软件质量报告模板-产品质量度量
    性能测试报告模板
    SQL查询语法30例
    性能测试:Jmeter-Beanshell请求加密实例
    安全性测试:OWASP ZAP 2.8 使用指南(三):ZAP代理设置
    centos7下使用x11远程带窗口安装Oracle
    python Linux 环境 (版本隔离工具)
    Python多版本环境搭建(Linux系统)
    ArrayList1.8
  • 原文地址:https://www.cnblogs.com/zhang-han/p/14392526.html
Copyright © 2011-2022 走看看