侧边栏壁纸
  • 累计撰写 58 篇文章
  • 累计创建 67 个标签
  • 累计收到 1 条评论

Java基础|反射

lihaocheng
2019-03-22 / 0 评论 / 0 点赞 / 601 阅读 / 989 字
温馨提示:
晚上记得开启夜间模式哦

一、从 Class 说起

Java 提供了一个 java.lang.Class 类。
在 Object 类中,getClass() 方法用来获取 Class 对象。
例如,我们可以这样来获取 Date 类在运行时的 Class 对象

//Returns the runtime class of this Object.
Class<Date> cls=Date.class;

这里我们可以发现,获取 Class 对象不需要进行实例化。

而对于基本数据类型、接口、数组、枚举类型,Java 都为其提供了获取 Class 的方法。
例如为基本数据可以通过 .class 来获取对应的 Class 对象,

Class<Integer> cls=int.class;

而 Class 类又为我们提供了获取其他信息的方法
但其中最为重要的还是这两个类—— Fields 和 Method。

二、Field

我们可以通过getFields()方法获取到该类的字段信息。

Field 囊括了 Java 中反射相关的所有类。
例如:

  • isAccessible()方法,判断是否有访问的权限。
  • isAccessible()方法用来设置 Java 的访问机制,为 true 即表示允许读写非 public 的字段。
  • get​(Object obj) 方法获取到对应的 value 值。

三、Method

Class 还提供另一个方法—— getMethods(),他可以返回所有的 public 方法,对应的,还有返回所有非 public 方法的 getDeclaredMethods()方法。
通过获取到 Method 我们可以知道到其修饰符、参数、返回值注解等信息。

至此,我们关于 Java 反射的基础类型就介绍完了。我特意画了下面的图,以方便你的理解。
(图)

四、总结

Java 中所有的类/方法/数据类型都实现了 getClass() 或与之相似的方法用来获取 Class。
通过 Class 的 getFields() 或 getMethods() 等方法来使用 Field 或 Method 中的方法。
通过这些方法来动态的获取到 Java 中任意元素的属性值、访问修饰符等其他信息。
Java 反射就这样被实现了。

0

评论区