JAVA反射reflect常用方法

Reflect笔记

基础

结构信息

  • Class c = Class.forname("类的名称"); 从类的名称创建类对象。
  • class.getName(); 获得类的名称 会带上包名,例如com.java.test.App
  • class.getSimpleName(); 获得类的简单名称,例如App
  • class.getInterfaces(); 获得类的接口,是一个数组,可以通过Arrays.toString()输出;
  • class.getModifers(); 获得修饰符,得到一个代表修饰符的数字;
  • 可以通过Modifier.toString(数字) 得到字符串,如public final

成员变量

  • Filed[] f = class.getFileds(); 获取所有public属性
  • class.getDeclaredFileds() 获取所有权限的属性
  • f.getName 获得属性名字
  • f.getType 获得属性类型

构造方法

  • class.getConstructors() 所有构造方法
  • class.getDeclaredConstructors() 所有权限的构造
  • class.getConstructor() 指定的构造方法
  • class.getDeclaredConstructor() 所有指定构造方法
  • 通过constructor.newInstance()构造新对象

成员方法

  • getMethods() 获得所有方法
  • getname(); 获得名字
  • getModifiers(); 获得修饰符
  • getReturnTypes(); 获得返回类型

操作

使用反射操作属性(不安全)

  1. 获取类的完整路径字符串
  2. 根据类的完整路径获得类对象
  3. 使用set(obj,值)进行对相应属性的修改
  4. f.getXxx(obj) 获得obj该属性的值

使用Method执行方法

m.invoke(obj) 具有返回值
invoke 简单点来说,就是将一个方法(method)运用到具体的类上

比如我有一个类Person,中间有属性age
得到PersongetAge方法后
使用f.invoke(person_1,Object[])来对这个具体的对象使用方法

原文地址:https://www.cnblogs.com/lizinuo/p/15361474.html