电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> JSP教程
学习心得:Java为什么支持反射机制?-JSP教程,Java技巧及代码
作者:网友供稿 点击:12
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
java为什么能够支持reflection?答案是java运行时仍然拥有类型信息,它包含了这个类一切:它有哪些字段、哪些方法,各是何种保护级别等等,还有这个类依赖于哪些类。在java中,类信息以对象的形式存放,这些对象是一种元对象,它们的类型就是class。拥有了这些信息,无论是动态创建对象还是调用某些方法都是轻而易举的。在c++中,通过rtti(运行时类型识别),我们也可以知道类的一些信息,但为什么c++中却没有reflection,原因是类型信息不完整。rtti这个名字本身就告诉我们,c++的类型信息是用来进行类型识别的,因此,它也不需要其它额外的信息。并不是c++无法做到这一点,而是c++不希望给用户增加额外的负担。有所得,必然有所失,因此,c++放弃了元对象。关于这一点,c++之父bjarne stroustrup在他的《c++语言的设计与演化》的14.2.8节中进行了深入的讨论。

        元对象是java reflection的物质基础,那它的精神基础又是什么呢?java为什么要支持reflection?经过上面的讨论,我们把这个问题再进一步,为什么java要提供元对象?

        讨论这个问题,我们还要拉回到十年前,那时java刚刚来到正式登上历史的舞台。java实际上诞生在这之前的数年,那时候还叫oak,环境所限使得这一划时代的杰作甫一出炉便被束之高阁。当netscape掀起了为网络大戏的序幕,java得以凤凰涅槃,这其中很重要的一个原因就是java是以网络为中心的。

        仔细观察,我们会发现,java的整个基础架构的设计都是为网络服务。首当其冲的便是java中最著名的跨平台。其实,在java之前的年代,人们也需要考虑平台之间的可移植性,但这种移植大多数集中在源码一级,这也就是c语言可以流行的原因之一,在单机环境下,平台的差异并不那么明显。网络的出现使平台之间差异凸现出来,因为网络可能会连接各种各样的计算机和设备。没错,还有设备,你也许知道java最初的开发是和嵌入式设备相关的。一旦应用可以跨平台,程序开发和后期管理维护工作将得到极大的简化,可移植性也从源码级晋升到二进制级(java字节码)。所以,跨平台实际上也是为了网络打基础。java中另一个重要的买点——安全性与网络之间的关系更为密切,谁都可以想出几条理由,把二者关联起来。
再来具体看看java的基础架构如何对网络进行支持的。还记得java最初是怎么吸引人的吗?没错,applet。熟悉原理的朋友都知道,applet的运行是把远程的类文件下载到本地来执行的。相对于本地硬盘,网络给我们的感觉就是一个字————慢。如果java采用传统可执行文件组织方式,即一个完整的可执行文件,把整个applet下载下来的运行,只怕等到花儿也谢了。java采用的手法是把文件拆开,以类为单位进行组织,这就是我们今天见到的class文件。这样,执行的过程就变成第一个类下载之后就可以运行,大大节省了最初的等待时间。好的设计会把程序分成若干的模块,所以,绝大多数程序不可能写在一个类中。因此,类文件中必须包含它所用到类。对于引导部分,我们可以让它以特定的方式开始执行,比如把我们耳熟能详的main方法放在特定的字节,但对于没有定法的任意方法,是没有办法规定的,而一个类调用另一个类的方法就是这样随意,因此类文件中必须包含这个类方法的信息,进一步字段信息也会加进来,这样几乎一个完整类的信息就出来了,而这些信息对应的恰好是元对象。所以,元对象出现在java基础架构中。

        有了元对象,reflection也成了一件顺其自然的事情。有了reflection,java也就拥有了动态扩展的能力,这样就可以极大的提高程序的灵活性。

        关于java基础结构对网络的支持还可以再说几句。class文件经过了精心的设计,本身相当紧凑,其目的就是为了方便在网络上传输,而jar文件的出现,其目的也是为了方便网络传输,因为如果每次只传输一个类,大量的时间都被浪费在建立网络连接的过程中,jar文件使得一次传输多个类成为可能,而且我们还知道jar文件中的数据是经过压缩的,这样可以进一步减少下载时间。java基础架构对网络的支持,《深入java虚拟机》(第二版)的4.3节进行了很好阐述,有兴趣不妨看一下。

        对reflection思考让我有机会对java本身的设计进行深入的思考。一个好的软件设计需要一个核心理念作为支撑,所有的一切都是围绕核心进行的,而对于java,这个核心就是网络。

一次有趣的思考体验!


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·IReport与JasperReport开发详解一-JSP教程,Java技巧及代码
·JSTL(JSP标准标签库)介绍-JSP教程,资料/其它
·格式化输入日期时间控件 JieFormattedDateBox-JSP教程,Java技巧及代码
·JSTL简化JSP编码-JSP教程,Jsp/Servlet
·JUnit和单元测试入门简介-JSP教程,Java技巧及代码
·从数据库中读取一个图片并保存为一个图片文件-JSP教程,数据库相关
·Java Swing入门基础-JSP教程,Java技巧及代码
·IntelliJ IDEA培训-JSP教程,Java技巧及代码
·通过JSP的预编译消除性能瓶颈-JSP教程,Jsp/Servlet
·Java中利用JMF编写摄像头拍照程序-JSP教程,Java技巧及代码

最新文章
·J2ME中的时间处理方法
·J2ME播放声音流程简介
·J2ME开发之手机键盘使用注意问题
·J2ME 记录管理存储
·MVC模式在j2me项目中的应用(二)
·MVC模式在j2me项目中的应用(一)
·J2ME中使用记录存储系统(RMS)存储信息
·J2ME与MIDP开发(1)
·用简单的J2ME程序测试MIDlet的生命周期
·JAVA基础:提升JSP应用程序的七大绝招


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号