本文已参与「新人创作礼」活动,一起开启掘金创作之路。
应用场景
这篇文章来看一下java 中反射机制的应用场景。其实反射应用的场景都是在java 的“运行时”起效的。
我们知道,“反射”就是通过一个对象,来获取某个类的全部的结构信息,这样就可以在运行期间动态地改变代码的结构了。
这里我们举几个反射应用场景的例子,如下:
- 在程序运行的时候,用来判断任意一个对象所属的类。
- 运行期通过某个对象,来判断其对应的类的所有的成员变量、方法这些基本类的信息。
- 在运行时,通过反射获得的类,再构造出这个类的对象,并可以调用新的对象中的任意一个成员变量和方法(理所应当,private 类型也可以被获得并调用)
- 在运行时,获取这个类中的泛型信息。
- 运行时处理注解,生成动态代理等等。
其实我们常用的场景也就是上面的前三条。
另外,我们理解反射的最基本的内容,就是需要知道Class 类的概念,它在我们实际编码的时候是必不可少的一个类。
Class 类是描述类的类。对于任何一个类来说,它在内存中只有一个Class 对象。
在当一个类被加载以后,这个类的整体结构中的内容都会被封装在Class 的对象中。我们也就是通过这个对象来获取原本的类的基本信息的。
另外需要说明,对于Class 类本身,一个Class 的对象,它对应的应该是一个加载到JVM 中的一个.class 文件。(像其他对象一样)
通过某个Class,我们可以完整地得到一个类中所有已经被加载的结构。其实Class 是反射的核心,也是反射的出发点。在java 开发中,对于而我们任何想动态加载、运行的类,只有在先获得对应的Class 对象之后,才可向下继续执行。
另外我们需要知道,通过反射在运行时获取到的运行时类的完整结构包括的内容为:类实现的接口、继承的父类、类的构造器、类中的所有的方法、类的所有变量以及这个类中的所有的注解。
总结
这篇文章主要介绍的就是Java 中反射的应用场景,读者需要好好理解并记忆。