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了设计开始加入反射,然后逐步完善各种特性直到今天。
于是查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了设计开始加入反射,然后逐步完善各种特性直到今天。
相关文章推荐
- javaSE_8系列博客——Java语言的特性(三)--类和对象(6)--为你的类提供构造函数
- JDK1.7新特性(4):java语言动态性之反射API
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
- 黑马程序员_Java语言_反射及jdk新特性
- Java 7新特性(八)——语言变化或许较小
- 体验Java 5.0的新增语言特性
- javaSE_8系列博客——Java语言的特性(三)--类和对象(2)--类(宏观概述)
- 为什么JAVA要提供 wait/notify 机制?是为了避免轮询带来的性能损失
- Java高级特性之反射学习总结
- Java语言的11个特性(转)
- JAVA 语言的主要特性
- 重踏学习Java路上_Day27(反射,模式设计,jdk新特性)
- Atitit.跨语言反射api 兼容性提升与增强 java c#。Net php js
- java安全沙箱(三)之内置于Java虚拟机(及语言)的安全特性
- javaSE_8系列博客——Java语言的特性(一)--关于面向对象基本概念的理解(1)
- Android为什么选择Java作为开发语言之我见
- javaSE_8系列博客——Java语言的特性(三)--类和对象(8)--对象
- Java8新特性-语言新特性
- 体验Java 5.0的新增语言特性
- 【JAVA教程】第三讲 Java语言中的面向对象特性