您的位置:首页 > 编程语言 > Java开发

Java语言为什么提供反射特性

2013-11-10 23:54 323 查看
不久前看java编程思想,突然想到为什么java会提供反射机制这个问题。在面向对象的编程思想里,访问权限控制是必须的,如java也通过设计private protected public以及默认包访问等不断的细化访问权限,但,为什么java的设计者在设计语言时会考虑提出一个看似与封装思想背道而驰的反射来获取类内对象,比如对私有的成员和方法,直接调用setAccessible(true)就访问了,这看起来有点不合理啊。

于是查java编程思想,希望从中找到答案,发现其中并没有这部分内容,只是讲了支持反射以后java能有哪些便利。的确,有了反射,可以搞动态代理,可以搞控制反转,于是有了spring的ioc和aop等设计思想,不过这如同,有了货币,可以方便的做交易,买米,给钱,买家具,给钱,买房,给钱,问题是,为什么会有货币呢?

于是上网查了下,基本只有/article/11370092.html 说的比较靠谱,总结起来就是:java的设计,是以网络为核心的,applet时代,为了省流量,以class的字节文件传输,问题是我在本地下载了class文件之后,怎么运行呢?怎么知道我该运行方法的入口和调用方法的实现呢?

答案是采取特定编解码方式,可以参考/article/4255247.html(虽然这边是讲的序列化,不过打包class也可以看做类似方式),解码出来之后,获取了class文件中原始类的的类成员和方法就可以运行了(话说,这不就是反射了么)

有了这一切,剩下的什么动态代理,以及Spring等框架就顺其自然了,果然一个语言还是了解点设计的想法还是不错的。另外,翻了java版本历史(参见http://en.wikipedia.org/wiki/Java_version_history),应该是在JDK1.1才引入反射特性的,如果没记错,最初java的产生因为c++的内存管理不够清晰,最初的应用是嵌入式平台,怎么会考虑反射呢?后来转向Internet了设计开始加入反射,然后逐步完善各种特性直到今天。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: