什么是反射
主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性。
反射的原理
- JVM是如何构建一个实例的
classloader加载class文件解析成字节码文件到内存中
开辟内存空间
初始化对象
执行构造方法
- .class文件
- 类加载器
1.检查是否已经加载,有就直接返回,避免重复加载
2.当缓存中确实没有该类,那么遵循父优先加载机制,加载.class文件
3.上面两步都失败了,调用findClass()方法加载
优点
以实现动态创建对象和编译,体现出很大的灵活性,特别是在J2EE的开发中它的灵活性就表现的十分明显。比如,一个大型的软件,不可能一次就把把它设计的很完美,当这个程序编译后,发布了,当发现需要更新某些功能时,我们不可能要用户把以前的卸载,再重新安装新的版本,假如这样的话,这个软件肯定是没有多少人用的。采用静态的话,需要把整个程序重新编译一次才可以实现功能的更新,而采用反射机制的话,它就可以不用卸载,只需要在运行时才动态的创建和编译,就可以实现该功能。
缺点
对性能有影响。使用反射基本上是一种解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。这类操作总是慢于只直接执行相同的操作。
