反射机制应用

应用1: 
Java反射框架主要提供以下功能:
1).在运行时判断任意一个对象所属的类;
2).在运行时构造任意一个类的对象;
3).在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法);
4).在运行时调用任意一个对象的方法
比如Eclipse,当输入,对象之后,再输入点,的时候,后面会出现all class function,就是反射.
重点:是运行时而不是编译时
应用2:
比如,可以在运行的时候,加载是oracle驱动 or mysql驱动。
如果是编译的时候,两个都得加载。
运行的时候,只需要加载一个。
这种运行才加载的方式,有点解释性语言,shell,nodejs的特点。

相关材料
https://www.sczyh30.com/posts/Java/java-reflection-1/#%E5%9B%9B%E3%80%81%E5%8F%8D%E5%B0%84%E7%9A%84%E4%B8%80%E4%BA%9B%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9%EF%BC%88%E5%BE%85%E8%A1%A5%E5%85%85%EF%BC%89
深入解析Java反射(1) - 基础
常用原理和使用
https://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html
全是反射的例子,缺少理论,即没有why
http://www.importnew.com/21458.html
划重点:
事实上,每一个类都持有其对应的Class类的对象的引用(Object类中的getClass()能让我们获取到它),其中包含着与类相关的信息。
非常容易注意到,针对每一个类,编译Java文件会生成一个二进制.class文件,这其中就保存着该类对应的Class对象的信息。
.class是用于供类加载器使用的文件
Java程序在运行之前并没有被完全加载,各个部分是在需要时才被加载的。
为了使用类而作的准备包含三步:
加载。由类加载器执行,查找字节码,创建一个Class对象。(堆中)
链接。验证字节码,为静态域分配存储空间,如果必需的话,会解析这个类创建的对其他类的所有引用(比如说该类持有static域)。
初始化。如果该类有超类,则对其初始化,执行静态初始化器[注]和静态初始化块。
http://www.importnew.com/17616.html
spring 可以配置反射

猜你喜欢

转载自blog.csdn.net/fdsafwagdagadg6576/article/details/80353229
今日推荐