|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。心得Java为何可以撑持Reflection?谜底是Java运转时仍旧具有范例信息,它包括了这个类统统:它有哪些字段、哪些办法,各是何种回护级别等等,另有这个类依附于哪些类。在Java中,类信息以对象的情势寄存,这些对象是一种元对象,它们的范例就是Class。具有了这些信息,不管是静态创立对象仍是挪用某些办法都是十拿九稳的。在C++中,经由过程RTTI(运转时范例辨认),我们也能够晓得类的一些信息,但为何C++中却没有Reflection,缘故原由是范例信息不完全。RTTI这个名字自己就告知我们,C++的范例信息是用来举行范例辨认的,因而,它也不必要别的分外的信息。并非C++没法做到这一点,而是C++不但愿给用户增添分外的包袱。有所得,一定有所掉,因而,C++保持了元对象。关于这一点,C++之父BjarneStroustrup在他的《C++言语的计划与演变》的14.2.8节中举行了深切的会商。元对象是JavaReflection的物资基本,那它的精力基本又是甚么呢?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,这个中心就是收集。
一次风趣的思索体验!
主要缺点就是:速度比较慢,没有C和C++快 |
|