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

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

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

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

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

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值