JAVA网页设计J2SE 5.0专题 之 言语特征
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难j2seJ2SE5.0专题之言语特征本文作者:高宇翔(年夜胃)1.1.背景J2SE(TM)5.0正式公布至今已凌驾3个月的工夫了,就在前不久,也许是在两周之前,Sun又公布了更新过的JDK5.0Update1,改失落了一些第一个版本中呈现的bug。因为Java社群守候这一从1.4向5.0版本晋级已有相称长的一段工夫,人人都很体贴5.0中有哪些值得存眷的变更,因而blog的相干信息满天飞,我也灰溜溜地在本人的blog中添上了一系列的文章。无法这些blog文章,包含我本人的在内,一般都是平常而谈,因而CSDN第二期Java电子杂志的编纂们企图做一个专题对这一话题与相干人士举行一番深切的切磋。作为这期电子刊物的一部分,编纂们也约请我更体系的切磋一下:J2SE(TM)5.0中新引进的言语特征事实在实践中有哪些用处,和为何要引进这些新特征。对此我深感侥幸。我自己很愿意将我的一些大概算得上履历的Java履历跟人人分享,但愿这一篇小文能对人人懂得J2SE(TM)5.0有必定匡助。1.2.筹办事情起首,为了懂得J2SE(TM)5.0的新的言语特征,你必要下载新版的JDK,在这里能够找到下载链接:http://java.sun.com/j2se/1.5.0/download.jsp。固然,假如你已有过手动设置Java情况的履历,我也倡议你利用一个撑持J2SE(TM)5.0的IDE,保举EclipseSDK3.1M4,大概NetBeansIDE4.0。两个都是开源收费的,且很简单找到(Eclipse不必说了,NetBeansIDE4.0有与JDK5.0Update1的绑缚版)。说点题外话,Java的版本号自从1.2入手下手,仿佛就几显得有点糟糕。从1.2版本入手下手,Java(J2SE)被称作Java2,而不是Java1.2,如今则显得加倍古怪:Java(TM)2PlatformStandardEdition5.0大概J2SE(TM)5.0,而外部的版本号仍是1.5.0。那末究竟是1、2、仍是5呢?来看看Sun官方网站是怎样说的:从Java出生至今已有9年工夫,而从第二代Java平台J2SE算起也有5个岁首了。在如许的背景下,将下一个版本的版本号从1.5改成5.0能够更好的反应出新版J2SE的成熟度、不乱性、可伸缩性和平安性。好吧,如今我们将面临以下一些称号,而它们指的基础上是统一个工具:lTigerlJava(TM)2PlatformStandardEdition5.0lJ2SE(TM)5.0lJavaversion1.5.0l…在本文中,为了便利起见,我将一致利用J2SE(TM)5.0这个称号。假如你对Java各个版本的代号感乐趣,就像这里的"Tiger",能够参考以下网址:http://java.sun.com/j2se/codenames.html。泄漏一点:Java下一个版本(6.0)的代号是"Mustang"野马,再下一个版本(7.0)的代号是"Dolphin"海豚。1.3.概述J2SE(TM)5.0引进了良多保守的言语元素变更,这些变更或多或少加重了我们开辟职员的一些编码包袱,个中的年夜部分也一定会被使用到行将公布的J2EE(TM)5.0中。次要的新特征包含:l泛型l加强的for轮回l主动装箱和主动拆箱l范例平安的列举l可变长度参数l静态引进l元数据(注解)lC作风的格局化输入这傍边,泛型、列举和注解大概会占用较年夜的篇幅,而其他的由于用法刀切斧砍,抑或绝对复杂,我就稍作先容,剩下的留给读者往思索、往探究了。1.4.泛型泛型这个标题相称年夜,年夜到完整能够就这个话题写一本书。有关Java是不是必要泛型和怎样完成泛型的会商也早就在Java社群广为传播。终究,我们在J2SE(TM)5.0中看到了它。大概今朝Java对泛型的撑持还算不上充足幻想,但这一特征的增加也经足以让我们欣喜一阵了。在接上去的先容中,我们会懂得到:Java的泛型固然跟C++的泛型看上往非常类似,但实在有着相称年夜的区分,有些细节的工具也相称庞大(最少良多中央会跟我们的直觉南辕北辙)。能够如许说,泛型的引进在很年夜水平上增添了Java言语的庞大度,对初学者特别是个应战。上面我们将一点一点往里挖。起首我们来看一个复杂的利用泛型类的例子:ArrayList<Integer>aList=newArrayList<Integer>();aList.add(newInteger(1));//...IntegermyInteger=aList.get(0);我们能够看到,在这个复杂的例子中,我们在界说aList的时分指了然它是一个间接受Integer范例的ArrayList,当我们挪用aList.get(0)时,我们已不再必要先显式的将了局转换成Integer,然后再赋值给myInteger了。而这一步在新近的Java版本中是必需的。大概你在想,在利用Collection时勤俭一些范例转换就是Java泛型的全体吗?远不止。单就这个例子而言,泛型最少另有一个更年夜的优点,那就是利用了泛型的容器类变得加倍强健:新近,Collection接口的get()和Iterator接口的next()办法都只能前往Object范例的了局,我们能够把这个了局强迫转换成任何Object的子类,而不会有任何编译期的毛病,但这明显极可能带来严峻的运转期毛病,由于在代码中断定从某个Collection中掏出的是甚么范例的对象完整是挪用者本人说了算,而挪用者大概其实不分明放进Collection的对象详细是甚么类的;就算晓得放出来的对象“应当”是甚么类,也不克不及包管放到Collection的对象就必定是谁人类的实例。如今有了泛型,只需我们界说的时分指明该Collection承受哪一种范例的对象,编译器能够帮我们制止相似的成绩溜到产物中。我们在实践事情中实在已看到了太多的ClassCastException,不是吗?泛型的利用从这个例子看也是相称易懂。我们在界说ArrayList时,经由过程类名前面的括号中的值指定这个ArrayList承受的对象范例。在编译的时分,这个ArrayList会被处置成只承受该类或其子类的对象,因而任何试图将其他范例的对象增加出去的语句城市被编译器回绝。那末泛型是如何界说的呢?看看上面这一段示例代码:(个中用E取代在实践中将会利用的类名,固然你也能够利用其余称号,习气上在这里利用年夜写的E,暗示Collection的元素。)publicclassTestGenerics<E>{Collection<E>col;publicvoiddoSth(Eelem){col.add(elem);//...}}在泛型的利用中,有一个很简单有的曲解,那就是既然Integer是从Object派生出来的,那末ArrayList<Integer>固然就是ArrayList<Object>的子类。真的是如许吗?我们细心想想就会发明如许做大概会带来的成绩:假如我们能够把ArrayList<Integer>向上转型为ArrayList<Object>,那末在往这个转了型今后的ArrayList中增加对象的时分,我们岂不是能够增加任何范例的对象(由于Object是一切对象的大众父类)?这明显让我们的ArrayList<Integer>得到了底本的目标。因而Java编译器克制我们如许做。那既然是如许,ArrayList<Integer>和ArrayList<String>、ArrayList<Double>等等有无大众的父类呢?有,那就是ArrayList<?>。?在这里叫做通配符。我们为了减少通配符所指代的局限,一般也必要如许写:ArrayList<?extendsSomeClass>,如许写的寄义是界说如许一个类ArrayList,例如说SomeClass有SomeExtendedClass1和SomeExtendedClass2这两个子类,那末ArrayList<?extendsSomeClass>就是以下几个类的父类:ArrayList<SomeClass>、ArrayList<SomeExtendedClass1>和ArrayList<SomeExtendedClass2>。接上去我们更进一步:既然ArrayList<?extendsSomeClass>是一个通配的公用父类,那末我们可不成以往声明为ArrayList<?extendsSomeClass>的ArrayList实例中增加一个SomeExtendedClass1的对象呢?谜底是不克不及。乃至你不克不及增加任何对象。为何?由于ArrayList<?extendsSomeClass>实践上代表了一切ArrayList<SomeClass>、ArrayList<SomeExtendedClass1>和ArrayList<SomeExtendedClass2>三种ArrayList,乃至包含未知的承受SomeClass其他子类对象的ArrayList。我们拿到一个界说为ArrayList<?extendsSomeClass>的ArrayList的时分,我们其实不能断定这个ArrayList详细是利用哪一个类作为参数界说的,因而编译器也没法让这段代码编译经由过程。举例来说,假如我们想往这个ArrayList中放一个SomeExtendedClass2的对象,我们怎样包管它实践上不是其他的如ArrayList<SomeExtendedClass1>,而就是这个ArrayList<SomeExtendedClass2>呢?(还记得吗?ArrayList<Integer>并不是ArrayList<Object>的子类。)怎样办?我们必要利用泛型办法。泛型办法的界说相似上面的例子:publicstatic<TextendsSomeClass>voidadd(Collection<T>c,Telem){c.add(elem);}个中T代表了我们这个办法等候的谁人终极的详细的类,相干的声明必需放在办法署名中紧靠前往范例的地位之前。在本例中,它能够是SomeClass大概SomeClass的任何子类,其申明<TentendsSomeClass>放在void关头字之前(只能放在这里)。如许我们就能够让编译器确信当我们试图增加一个元素到泛型的ArrayList实例中时,能够包管范例平安。Java泛型的最年夜特性在于它是在言语级别完成的,区分于C#2.0中的CLR级别。如许的做法使得JRE能够不用做年夜的调剂,弱点是没法撑持一些运转时的范例鉴别。一旦编译,它就被写逝世了,能供应的静态才能相称弱。团体以为泛型是此次J2SE(TM)5.0中引进的最主要的言语元素,给Java言语带来的影响也是最年夜。举个例子来说,我们能够看到,几近一切的CollectionsAPI都被更新成撑持泛型的版本。如许做带来的优点是不言而喻的,那就是削减代码反复(不必要供应多个版本的某一个类大概接口以撑持分歧类的对象)和加强代码的强健性(编译期的范例平安反省)。不外怎样才干真正使用好这个特征,特别是怎样完成本人的泛型接口或类供别人利用,就并不是那末不言而喻了。让我们一同在利用中渐渐堆集。1.5.加强的for轮回你是不是已厌倦了每次写for轮回时都要写上那些机器的代码,特别当你必要遍历数组大概Collection,如:(假定在Collection中贮存的对象是String范例的)publicvoidshowAll(Collectionc){for(Iteratoriter=c.iterator();iter.hasNext();){System.out.println((String)iter.next());}}publicvoidshowAll(String[]sa){for(inti=0;i<sa.length;i++){System.out.println(sa);}}如许的代码不但显得痴肥,并且简单堕落,我想我们人人在刚入手下手打仗编程时,特别是C/C++和Java,大概几都犯过以下相似毛病的一种或几种:把for语句的三个表达式按次弄错;第二个表达式逻辑判别不准确(遗漏一些、多出一些、乃至逝世轮回);健忘挪动游标;在轮回体内不当心改动了游标的地位等等。为何不克不及让编译器帮我们处置这些细节呢?在5.0中,我们能够如许写:publicvoidshowAll(Collectionc){for(Objectobj:c){System.out.println((String)obj);}}publicvoidshowAll(String[]sa){for(Stringstr:sa){System.out.println(str);}}如许的代码显得加倍明晰和简便,不是吗?详细的语法很复杂:利用":"分开开,后面的部分写明从数组或Collection中将要掏出的范例,和利用的一时变量的名字,前面的部分写上数组大概Collection的援用。加上泛型,我们乃至能够把第一个办法变得加倍大度:publicvoidshowAll(Collection<String>cs){for(Stringstr:cs){System.out.println(str);}}有无发明:当你必要将Collection<String>交换成String[],你所必要做的仅仅是复杂的把参数范例"Collection<String>"交换成"String[]",反过去也是一样,你不完整必要改其他的工具。这在J2SE(TM)5.0之前是没法设想的。关于这个看上往相称便利的新言语元素,当你必要在轮回体中会见游标的时分,会显得很别扭:例如说,当我们处置一个链表,必要更新个中某一个元素,大概删除某个元素等等。这个时分,你没法在轮回体内取得你必要的游标信息,因而必要回退到本来的做法。不外,有了泛型和加强的for轮回,我们在年夜多半情形下已不必往费心那些烦人的for轮回的表达式和嵌套了。究竟,我们年夜部分工夫都不会必要往懂得游标的详细地位,我们只必要遍历数组或Collection,对吧?1.6.主动装箱/主动拆箱所谓装箱,就是把值范例用它们绝对应的援用范例包起来,使它们能够具有对象的特质,如我们能够把int型包装成Integer类的对象,大概把double包装成Double,等等。所谓拆箱,就是跟装箱的偏向相反,将Integer及Double如许的援用范例的对象从头简化为值范例的数据。在J2SE(TM)5.0公布之前,我们只妙手工的处置装箱和拆箱。大概你会问,为何必要装箱和拆箱?例如说当我们试图将一个值范例的数据增加到一个Collection中时,就必要先把它装箱,由于Collection的add()办法只承受对象;而当我们必要在稍后将这条数据掏出来,而又但愿利用它对应的值范例举行操纵时,我们又必要将它拆箱成值范例的版本。如今,编译器能够帮我们主动地完成这些需要的步骤。上面的代码我供应两个版本的装箱和拆箱,一个版本利用手工的体例,另外一个版本则把这些不言而喻的代码交给编译器往完成:publicstaticvoidmanualBoxingUnboxing(inti){ArrayList<Integer>aList=newArrayList<Integer>();aList.add(0,newInteger(i));inta=aList.get(0).intValue();System.out.println("Thevalueofiis"+a);}publicstaticvoidautoBoxingUnboxing(inti){ArrayList<Integer>aList=newArrayList<Integer>();aList.add(0,i);inta=aList.get(0);System.out.println("Thevalueofiis"+a);}看到了吧,在J2SE(TM)5.0中,我们不再必要显式的往将一个值范例的数据转换成响应的对象,从而把它作为对象传给其他办法,也不用手工的将谁人代表一个数值的对象拆箱为响应的值范例数据,只需你供应的信息充足让编译器确信这些装箱/拆箱后的范例在利用时是正当的:例如讲,假如在下面的代码中,假如我们利用的不是ArrayList<Integer>而是ArrayList大概其他不兼容的版本如ArrayList<java.util.Date>,会有编译毛病。固然,你必要充足器重的是:一方面,关于值范例和援用范例,在资本的占用上有相称年夜的区分;另外一方面,装箱和拆箱会带来分外的开支。在利用这一便利特征的同时,请不要健忘了面前埋没的这些大概会影响功能的要素。1.7.范例平安的列举在先容J2SE(TM)5.0中引进的范例平安列举的用法之前,我想先复杂先容一下这一话题的背景。我们晓得,在C中,我们能够界说列举范例来利用别号取代一个汇合中的分歧元素,一般是用于形貌那些能够回为一类,而又具有无限数目的种别大概观点,如月份、色彩、扑克牌、太阳系的行星、五年夜洲、四年夜洋、季候、学科、四则运算符,等等。它们一般看上往是这个模样:typedefenum{SPRING,SUMMER,AUTUMN,WINTER}season;本色上,这些别号被处置成int常量,好比0代表SPRING,1代表SUMMER,以此类推。由于这些别号终极就是int,因而你能够对它们举行四则运算,这就形成了语意上的不明白。Java一入手下手并没有思索引进列举的观点,大概是出于坚持Java言语简便的思索,可是利用Java的宽大开辟者关于列举的需求并没有由于Java自己没有供应而消散,因而呈现了一些罕见的合用于Java的列举计划形式,如intenum和typesafeenum,另有很多开源的列举API和不开源的外部完成。我大抵说一下intenum形式和typesafeenum形式。所谓intenum形式就是仿照C中对enum的完成,如:publicclassSeason{publicstaticfinalintSPRING=0;publicstaticfinalintSUMMER=1;publicstaticfinalintAUTUMN=2;publicstaticfinalintWINTER=3;}这类形式跟C中的列举没有太多实质上的区分,C列举的范围它基础上也有。而typesafeenum形式则要显得强健很多:publicclassSeason{privatefinalStringname;privateSeason(Stringname){this.name=name;}publicStringtoString(){returnname;}publicstaticfinalSeasonSPRING=newSeason("spring");publicstaticfinalSeasonSUMMER=newSeason("summer");publicstaticfinalSeasonAUTUMN=newSeason("autumn");publicstaticfinalSeasonWINTER=newSeason("winter");}后一种完成起首经由过程公有的机关办法制止了对该类的承继和显式实例化,因此我们只大概获得界说好的四种Season种别,而且供应了便利的toString()办法猎取成心义的申明,并且因为这是一个完整意义上的类,以是我们能够很便利的到场本人的办法和逻辑来自界说我们的列举类。终极,Java决意拥抱列举,在J2SE(TM)5.0中,我们看到了这一变更,它所接纳的计划思绪基础上就是下面提到的typesafeenum形式。它的语法很复杂,用一个实践的例子来讲,要界说一个列举,我们能够如许写:publicenumLanguage{CHINESE,ENGLISH,FRENCH,HUNGARIAN}接上去我们就能够经由过程Language.ENGLISH来利用了。呃…这个例子是否是有点太小儿科了,我们来看一个庞大点的例子。利用Java的范例平安列举,我们能够为一切列举元素界说公用的接口,然后详细到每一个元素自己,能够针对这些接话柄现一些特定的举动。这关于那些能够回为一类,又但愿能经由过程一致的接口会见的分歧操纵,将会相称便利。一般,为了完成相似的功效,我们必要本人来保护一套承继干系大概相似的列举形式。这里借用Java官方网站上的一个例子:publicenumOperation{PLUS{doubleeval(doublex,doubley){returnx+y;}},MINUS{doubleeval(doublex,doubley){returnx-y;}},TIMES{doubleeval(doublex,doubley){returnx*y;}},DIVIDE{doubleeval(doublex,doubley){returnx/y;}};//Doarithmeticoprepresentedbythisconstantabstractdoubleeval(doublex,doubley);}在这个列举中,我们界说了四个元素,分离对应加减乘除四则运算,关于每种运算,我们都能够挪用eval()办法,而详细的办法完成各别。我们能够经由过程上面的代码来实验下面这个列举类:publicstaticvoidmain(Stringargs[]){doublex=Double.parseDouble(args);doubley=Double.parseDouble(args);for(Operationop:Operation.values()){System.out.println(x+""+op+""+y+"="+op.eval(x,y));}}怎样,利用列举,我们是否是可以很便利的完成一些风趣的功效?实在说穿了,Java的范例平安列举就是包括了无限数目的已天生好的本身实例的一品种,这些现成的实例能够经由过程类的静态字段来猎取。1.8.可变长度参数望文生义,可变长度参数就是指在办法的参数体中,只需界说得当,我们可使用恣意数目的参数,相似于利用数组。在J2SE(TM)5.0中,一个新的语法被引进,就是在参数范例称号前面加上"...",暗示该办法能够承受多个该范例的参数。必要申明的是可变长度参数必需放在参数列表的最初,且一个办法只能包括一个如许的参数。在办法体外部,如许的参数被看成数组处置,看上往代码应当相似这个模样:publicStringtestVararg(String...args){StringBuildersb=newStringBuilder();for(Stringstr:args){sb.append(str);}returnsb.toString();}如许的办法署名跟你写成testVararg(String[]args)的区分在于:在挪用时,你不再必要传进一个包装好的String数组,你只必要复杂的写连续串String参数,以逗号离隔便可,就好像这个办法恰好有一个重载的版本是承受那末多个String参数一样。1.9.静态引进所谓静态引进就是指除引进类以外,我们如今又多了一种选择:引进某个类的静态字段。如:importstaticjava.lang.Math.PI;大概importstaticjava.lang.Math.*;如许我们在接上去的代码中,当我们必要利用某个被引进的静态字段时,就不必再写上后面的类名了。固然,呈现名字抵触时,跟本来的类引进一样,仍是必要前缀以示辨别。我团体以为这个新言语元素意义不年夜。当引进太多静态字段后,代码会变得难以浏览和保护。因为静态字段的名字一般不如类名那末具有形貌性,我以为本来在静态字段前写上类名才是更好的选择。不外,究竟每一个人的喜欢和需求分歧,假如你以为它对你有效,既然供应了,那末就用咯。1.10.元数据(注解)注解是J2SE(TM)5.0引进的主要言语元素,它所对应的JSR是JSR175,我们先来看看JSR175的文档对注解的申明:注解不会间接影响程序的语义,而开辟和部署工具则能够读取这些注解信息,并作响应处置,如天生分外的Java源代码、XML文档、大概其他将与包括注解的程序一同利用的物件。在之前的J2SE版本中,我们已利用到了一部分初期的注解元素,如@deprecated等。这些元素一般被用于发生HTML的Javadoc。在J2SE(TM)5.0中,注解被正式引进,且推到了Java汗青上亘古未有的高度。如今,注解不单单被用来发生Javadoc,更主要的,注解使得代码的编译期反省加倍无效和便利,同时也加强了代码的形貌才能。有一些注解是跟着J2SE(TM)5.0一同公布的,我们能够间接利用。除此以外,我们也能够很便利的完成自界说的注解。在此基本上,良多之前我们只能靠反射机制来完成的功效也变得加倍简单完成。我们来看现成的有哪些有效的注解:起首是@Override,这个注解被利用在办法上,标明这个办法是从其父类承继上去的,如许的写法能够很便利的制止我们在重写承继上去的办法时,不至于不当心写错了办法署名,且偷偷的溜过了编译器,形成潜伏性相称高的bug。其次是@Deprecated,标明该项(类、字段、办法)不再被保举利用。另有一个@SuppressWarnings,标明该项(类、字段、办法)所涵盖的局限不必要显现一切的告诫信息。这个注解必要供应参数,如unchecked等等。上面我经由过程一个例子向人人申明这些现成的注解的用法:publicclassMain{@DeprecatedpublicStringstr;publicstaticvoidmain(String[]args){newSubMain().doSomething();}publicvoiddoSomething(){System.out.println("Done.");}}classSubMainextendsMain{@Override@SuppressWarnings("unchecked","warning")publicvoiddoSomething(){java.util.ArrayListaList=newjava.util.ArrayList();aList.add(newInteger(0));System.out.println("DonebySubMain.");}}固然,我们也完整能够写本人的注解。注解界说的语法是@interface关头字。J2SE(TM)5.0撑持三种情势的注解:不带参数的标志注解、带一个参数的注解和带多个参数的完全注解。上面分离举例申明:标志注解,相似@Deprecated,如:@interfaceSomeEmptyAnnotation{}单个参数的注解,如:@interfaceMySingleElementAnnotation{Stringvalue();}和多个参数的注解,如:@interfaceMyAnnotationForMethods{intindex();Stringinfo();Stringdeveloper()default"SeanGAO";}我们能够看到,注解的界说跟interface的界说相称相似,我们还能够指定默许值。关于这些注解,我们也能够为其增加注解,所谓“注解的注解”。例如讲,我们一般会利用@Target指定注解的感化对象,和用@Retention指定注解信息写进的级别,如源代码、类文件等等。举个例子:@Target(ElementType.METHOD)@Retention(RetentionPolicy.SOURCE)public@interfaceSignedMethod{}在利用时,我们必要在注解称号后面写上@,然后()中指定参数值,如:@MyAnnotationForMethods(index=1,info="ThisisamethodtotestMyAnnotation.",developer="Somebodyelse")publicvoidtestMethod1(){//...}注解的最高文用在于它在源代码的基本上增添了有效的信息,使得源代码的形貌性更强。这些信息能够被代码以外的工具辨认,从而能够很便利的增添内部功效,和削减不用要的相干代码/文件的保护。这里我想复杂提一个超越J2SE(TM)5.0范围的话题:在将来的EJB3.0标准中会有相称多的对注解的使用,让我们预览一下未来的无形态会话bean用注解来界说会是甚么模样:@StatelesspublicclassBookShelfManagerBean{publicvoidaddBook(BookaBook){//businesslogicgoeshere...}publicCollectiongetAllBooks(){//businesslogicgoeshere...}//...}我们乃至不必写任何接口和部署形貌符,这些事情将完整由内部工具经由过程读取注解加上反射来完成,这不是很好吗?1.11.C作风格局化输入Java总算也有相似C的printf()作风的办法了,办法名一样叫作printf(),这一特征依附于前边提到的可变长度参数。举个例子来讲,我们如今能够写:System.out.printf("%shasavalueof%d.%n",someString,a);怎样,看上往还不错吧?必要注重的是Java为了撑持多平台,新增了%n标示符,作为对的增补。有关Java格局化输入的详细语法,请参考java.util.Formatter的API文档。1.12.结语在这一篇先容性的文章中,我们一同明白了J2SE5.0带来的新的言语元素,不晓得人人是不是也跟笔者一样,感觉到了这些新特征在进步我们的开辟效力上所作的伟大勉力。实在不但是言语元素,J2SE(TM)5.0的公布在其他良多方面都作了不小的改善,包含假造机、新的API类库等等,功能和功效上都有年夜幅提拔。关于次要靠J2EE用饭的伴侣来说,大概真正意义上要在事情中充实使用这些新的元素,生怕要等支流的J2EE服务器都撑持J2EE(TM)5.0的那一天了,对此我充斥等候。
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net里有这些工具吗?要简单多少?。 那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧! Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 是一种使用者不需花费很多时间学习的语言 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
页:
[1]