连咸鱼都能学会的Java反射
我们这期来简单讲讲Java反射的原理,优点和缺点
经过我看过大量的有关反射的博客、资料,
首先我简单的概括下Java反射原理:
在程序运行过程中,对于任意一个类、对象,都能知道其属性和方法
优点:
能大大的提高系统的灵活性、扩展性
因为存在这样的情况,我们在编程时,可能会引用到一个不在当前编译环境的类,这时候我们用反射,就能知道该类里的任何方法、成员变量,可以将其实例化为一个对象,然后调用其方法进行继续的编程
缺点:
性能损耗:因为反射包含了一些动态类型,JVM无法对其进行优化,运用了反射的操作其效率要大大低于没有用反射的操作,所以要做好取舍,避免在频繁使用的程序中运用反射操作。
破坏封装性:因为反射能随意调用一些类里不被允许的操作(如调用私有方法),可能造成一些错误,增加了代码中的耦合性。
安全限制:反射必须基于安全的环境下调用
这里简单说下在代码中怎么实现反射:
首先定义一个类,如下图的SaveAndConfirmAction
然后编写一个用于测试反射的小程序:
结果:
我们可以看到getDeclaredMethods()返回的则是在类自身声明的所有方法,包括复写的方法。
当然,Java还有其他的API能获取该类的方法、成员变量等等,在这我就不一一展示了,可以参考我下面的链接,他们有详细的讲解这些API
http://blog.****.net/xiaohanluo/article/details/52034127
http://blog.****.net/u012721013/article/details/51833626
我想说的是,反射这个小火球魔法我们只要了解就行,他的进阶魔法爆裂火球--动态代理,才是我们要掌握的,这个我会在下期博客详讲
最后,祝各位麻瓜们早日进阶,掌握更多美轮美奂的魔法。