参考

https://zhuanlan.zhihu.com/p/73710795

概述

  • 想照镜子一样,通过反射认识自己
  • 每个类都有其 class 对象,class 对象中有类的各种信息

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 获取对象的类对象
obj.getClass();

// 类名
obj.getClass().getName(); // "com.bjtcrj.Person"

// 全部成员变量
Field[] fields = obj.getClass().getDeclaredFields();

// 变量名称
field.getName();

// 获取变量的值
field.setAccessible(true);
field.get(obj);

// 方法
Method[] methods = obj.getClass().getDeclaredMethods();

// 执行方法
method.invoke(obj, args)

// 变量的类型
field.getType().getName() // "java.lang.String" 或者 "int"

// 根据类名实例化对象
private static Job getClass(String classname) throws Exception {
Class<?> class1 = Class.forName(classname);
return (Job) class1.newInstance();
}