仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 908|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA编程:心得总结:Java功能优化技能集锦

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
#
发表于 2015-1-18 11:14:47 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。技能|心得|功能|优化  1、通用篇  “通用篇”会商的成绩合适于年夜多半Java使用。
  1.1不必new关头词创立类的实例
  用new关头词创立类的实例时,机关函数链中的一切机关函数城市被主动挪用。但假如一个对象完成了Cloneable接口,我们能够挪用它的clone()办法。clone()办法不会挪用任何类机关函数。
  在利用计划形式(DesignPattern)的场所,假如用Factory形式创立对象,则改用clone()办法创立新的对象实例十分复杂。比方,上面是Factory形式的一个典范完成:
publicstaticCreditgetNewCredit(){
returnnewCredit();
}
  改善后的代码利用clone()办法,以下所示:
privatestaticCreditBaseCredit=newCredit();
publicstaticCreditgetNewCredit(){
return(Credit)BaseCredit.clone();
}
  下面的思绪关于数组处置一样很有效。
  1.2利用非堵塞I/O
  版本较低的JDK不撑持非堵塞I/OAPI。为制止I/O堵塞,一些使用接纳了创立大批线程的举措(在较好的情形下,会利用一个缓冲池)。这类手艺能够在很多必需撑持并发I/O流的使用中见到,如Web服务器、报价和拍卖使用等。但是,创立Java线程必要相称可不雅的开支。
  JDK1.4引进了非堵塞的I/O库(java.nio)。假如使用请求利用版本较早的JDK,在这里有一个撑持非堵塞I/O的软件包。
  请拜见Sun中国网站的《调剂Java的I/O功能》。
  1.3慎用非常
  非常对功能倒霉。抛出非常起首要创立一个新的对象。Throwable接口的机关函数挪用名为fillInStackTrace()的当地(Native)办法,fillInStackTrace()办法反省仓库,搜集挪用跟踪信息。只需有非常被抛出,VM就必需调剂挪用仓库,由于在处置过程当中创立了一个新的对象。
  非常只能用于毛病处置,不该该用来把持程序流程。
  1.4不要反复初始化变量
  默许情形下,挪用类的机关函数时,Java会把变量初始化成断定的值:一切的对象被设置成null,整数变量(byte、short、int、long)设置成0,float和double变量设置成0.0,逻辑值设置成false。当一个类从另外一个类派生时,这一点特别应当注重,由于用new关头词创立一个对象时,机关函数链中的一切机关函数城市被主动挪用。
  1.5只管指定类的final润色符
  带有final润色符的类是不成派生的。在Java中心API中,有很多使用final的例子,比方java.lang.String。为String类指定final避免了人们掩盖length()办法。
  别的,假如指定一个类为final,则该类一切的办法都是final。Java编译器会寻觅时机内联(inline)一切的final办法(这和详细的编译器完成有关)。此举可以使功能均匀进步50%。
  1.6只管利用部分变量
  挪用办法时传送的参数和在挪用中创立的一时变量都保留在栈(Stack)中,速率较快。其他变量,如静态变量、实例变量等,都在堆(Heap)中创立,速率较慢。别的,依附于详细的编译器/JVM,部分变量还大概失掉进一步优化。请拜见《尽量利用仓库变量》。
  1.7乘法和除法
  思索上面的代码:
for(val=0;val<100000;val+=5){alterX=val*8;myResult=val*2;}
  用移位操纵替换乘法操纵能够极年夜地进步功能。上面是修正后的代码:
for(val=0;val<100000;val+=5){alterX=val<<3;myResult=val<<1;}
  修正后的代码不再做乘以8的操纵,而是改用等价的左移3位操纵,每左移1位相称于乘以2。响应地,右移1位操纵相称于除以2。值得一提的是,固然移位操纵速率快,但大概使代码对照难于了解,以是最好加上一些正文。
  
2、J2EE篇
  后面先容的改良功能技能合适于年夜多半Java使用,接上去要会商的成绩合适于利用JSP、EJB或JDBC的使用。
  2.1利用缓冲标志
  一些使用服务器到场了面向JSP的缓冲标志功效。比方,BEA的WebLogicServer从6.0版本入手下手撑持这个功效,OpenSymphony工程也一样撑持这个功效。JSP缓冲标志既可以缓冲页面片段,也可以缓冲全部页面。当JSP页面实行时,假如方针片段已在缓冲当中,则天生该片段的代码就不必再实行。页面级缓冲捕捉对指定URL的哀求,并缓冲全部了局页面。关于购物篮、目次和流派网站的主页来讲,这个功效极为有效。关于这类使用,页面级缓冲可以保留页面实行的了局,供后继哀求利用。
  关于代码逻辑庞大的页面,使用缓冲标志进步功能的效果对照分明;反之,效果大概略逊一筹。
  请拜见《用缓冲手艺进步JSP使用的功能和不乱性》。
  2.2一直经由过程会话Bean会见实体Bean
  间接会见实体Bean倒霉于功能。当客户程序远程会见实体Bean时,每个get办法都是一个远程挪用。会见实体Bean的会话Bean是当地的,可以把一切数据构造成一个布局,然后前往它的值。
  用会话Bean封装对实体Bean的会见可以改善事件办理,由于会话Bean只要在抵达事件界限时才会提交。每个对get办法的间接挪用发生一个事件,容器将在每个实体Bean的事件以后实行一个“装进-读取”操纵。
  一些时分,利用实体Bean会招致程序功能欠安。假如实体Bean的独一用处就是提取和更新数据,改成在会话Bean以内使用JDBC会见数据库能够失掉更好的功能。
  2.3选择符合的援用机制
  在典范的JSP使用体系中,页头、页脚部分常常被抽掏出来,然后依据必要引进页头、页脚。以后,在JSP页面中引进内部资本的办法次要有两种:include指令,和include举措。
  include指令:比方<%@includefile="copyright.html"%>。该指令在编译时引进指定的资本。在编译之前,带有include指令的页面和指定的资本被兼并成一个文件。被援用的内部资本在编译时就断定,比运转时才断定资本更高效。
include举措:比方<jsp:includepage="copyright.jsp"/>。该举措引进指定页面实行后天生的了局。因为它在运转时完成,因而对输入了局的把持加倍天真。但时,只要当被援用的内容频仍地改动时,大概在对主页面的哀求没有呈现之前,被援用的页面没法断定时,利用include举措才合算。
  2.4在部署形貌器中设置只读属性
  实体Bean的部署形貌器同意把一切get办法设置成“只读”。当某个事件单位的事情只包括实行读取操纵的办法时,设置只读属性有益于进步功能,由于容器不用再实行存储操纵。
  2.5缓冲对EJBHome的会见
  EJBHome接口经由过程JNDI称号查找取得。这个操纵必要相称可不雅的开支。JNDI查找最好放进Servlet的init()办法内里。假如使用中多处频仍地呈现EJB会见,最好创立一个EJBHomeCache类。EJBHomeCache类一样平常应当作为singleton完成。
  2.6为EJB完成当地接口
  当地接口是EJB2.0标准新增的内容,它使得Bean可以制止远程挪用的开支。请思索上面的代码。
PayBeanHomehome=(PayBeanHome)
javax.rmi.PortableRemoteObject.narrow
(ctx.lookup("PayBeanHome"),PayBeanHome.class);
PayBeanbean=(PayBean)
javax.rmi.PortableRemoteObject.narrow
(home.create(),PayBean.class);
  第一个语句暗示我们要寻觅Bean的Home接口。这个查找经由过程JNDI举行,它是一个RMI挪用。然后,我们定位远程对象,前往代办署理援用,这也是一个RMI挪用。第二个语句树模了怎样创立一个实例,触及了创立IIOP哀求并在收集上传输哀求的stub程序,它也是一个RMI挪用。
  要完成当地接口,我们必需作以下修正:
  办法不克不及再抛出java.rmi.RemoteException非常,包含从RemoteException派生的非常,好比TransactionRequiredException、TransactionRolledBackException和NoSuchObjectException。EJB供应了等价的当地非常,如TransactionRequiredLocalException、TransactionRolledBackLocalException和NoSuchObjectLocalException。
  一切数据和前往值都经由过程援用的体例传送,而不是传送值。
  当地接口必需在EJB部署的呆板上利用。简而言之,客户程序和供应服务的组件必需在统一个JVM上运转。
  假如Bean完成了当地接口,则其援用不成串行化。
  请拜见《用当地援用进步EJB会见效力》。
  2.7天生主键
  在EJB以内天生主键有很多路子,上面剖析了几种罕见的举措和它们的特性。
  使用数据库内建的标识机制(SQLServer的IDENTITY或Oracle的SEQUENCE)。这类办法的弱点是EJB可移植性差。
  由实体Bean本人盘算主键值(好比做增量操纵)。它的弱点是请求事件可串行化,并且速率也较慢。
  使用NTP之类的时钟服务。这请求有面向特定平台的当地代码,从而把Bean流动到了特定的OS之上。别的,它还招致了如许一种大概,即在多CPU的服务器上,统一个毫秒以内天生了两个主键。
  自创Microsoft的思绪,在Bean中创立一个GUID。但是,假如不乞助于JNI,Java不克不及断定网卡的MAC地点;假如利用JNI,则程序就要依附于特定的OS。
  另有其他几种举措,但这些举措一样都有各自的范围。仿佛只要一个谜底对照幻想:分离使用RMI和JNDI。先经由过程RMI注册把RMI远程对象绑定到JNDI树。客户程序经由过程JNDI举行查找。上面是一个例子:
publicclasskeyGeneratorextendsUnicastRemoteObjectimplementsRemote{
privatestaticlongKeyValue=System.currentTimeMillis();
publicstaticsynchronizedlonggetKey()throwsRemoteException{returnKeyValue++;}
  2.8实时扫除不再必要的会话
  为了扫除不再举动的会话,很多使用服务器都有默许的会话超不时间,通常是30分钟。当使用服务器必要保留更多会话时,假如内存容量不敷,操纵体系会把部份内存数据转移到磁盘,使用服务器也大概依据“比来最频仍利用”(MostRecentlyUsed)算法把部分不活泼的会话转储到磁盘,乃至大概抛出“内存不敷”非常。在年夜范围体系中,串行化会话的价值是很高贵的。当会话不再必要时,应该实时挪用HttpSession.invalidate()办法扫除会话。HttpSession.invalidate()办法一般能够在使用的加入页面挪用。
  2.9在JSP页面中封闭无用的会话
  关于那些无需跟踪会话形态的页面,封闭主动创立的会话能够节俭一些资本。利用以下page指令:
<%@pagesession="false"%>
  2.10Servlet与内存利用
  很多开辟者随便地把大批信息保留到用户会话当中。一些时分,保留在会话中的对象没有实时地被渣滓接纳机制接纳。从功能上看,典范的症状是用户感应体系周期性地变慢,却又不克不及把缘故原由回于任何一个详细的组件。假如监督JVM的堆空间,它的体现是内存占用不一般地年夜起年夜落。
  办理这类内存成绩次要有二种举措。第一种举措是,在一切感化局限为会话的Bean中完成HttpSessionBindingListener接口。如许,只需完成valueUnbound()办法,就能够显式地开释Bean利用的资本。
  别的一种举措就是尽快地把会话取消。年夜多半使用服务器都有设置会话取消距离工夫的选项。别的,也能够用编程的体例挪用会话的setMaxInactiveInterval()办法,该办法用来设定在取消会话之前,Servlet容器同意的客户哀求的最年夜距离工夫,以秒计。
  2.11HTTPKeep-Alive
  Keep-Alive功效使客户端到服务器真个毗连延续无效,当呈现对服务器的后继哀求时,Keep-Alive功效制止了创建大概从头创建毗连。市场上的年夜部分Web服务器,包含iPlanet、IIS和Apache,都撑持HTTPKeep-Alive。关于供应静态内容的网站来讲,这个功效一般很有效。可是,关于包袱较重的网站来讲,这里存在别的一个成绩:固然为客户保存翻开的毗连有必定的优点,但它一样影响了功能,由于在处置停息时代,原本能够开释的资本仍然被占用。当Web服务器和使用服务器在统一台呆板上运转时,Keep-Alive功效对资本使用的影响特别凸起。
  2.12JDBC与Unicode
  想必你已懂得一些利用JDBC时进步功能的措施,好比使用毗连池、准确地选择存储历程和间接实行的SQL、从了局集删除过剩的列、事后编译SQL语句,等等。
  除这些不言而喻的选择以外,另外一个进步功能的好选择大概就是把一切的字符数据都保留为Unicode(代码页13488)。Java以Unicode情势处置一切数据,因而,数据库驱动程序不用再实行转换历程。但应当记着:假如接纳这类体例,数据库会变得更年夜,由于每一个Unicode字符必要2个字节存储空间。别的,假如有其他非Unicode的程序会见数据库,功能成绩仍然会呈现,由于这时候数据库驱动程序仍然必需实行转换历程。
  2.13JDBC与I/O
  假如使用程序必要会见一个范围很年夜的数据集,则应该思索利用块提取体例。默许情形下,JDBC每次提取32行数据。举例来讲,假定我们要遍历一个5000行的纪录集,JDBC必需挪用数据库157次才干提取到全体数据。假如把块巨细改成512,则挪用数据库的次数将削减到10次。
  在一些情况下这类手艺有效。比方,假如利用可转动的纪录集,大概在查询中指定了FORUPDATE,则块操纵体例不再无效。
  2.14内存数据库
  很多使用必要以用户为单元在会话对象中保留相称数目的数据,典范的使用如购物篮和目次等。因为这类数据能够依照行/列的情势构造,因而,很多使用创立了复杂的Vector或HashMap。在会话中保留这类数据极年夜地限定了使用的可伸缩性,由于服务器具有的内存最少必需到达每一个会话占用的内存数目乘以并发用户最年夜数目,它不但使服务器代价高贵,并且渣滓搜集的工夫距离也大概延伸到难以忍耐的水平。
  一些人把购物篮/目次功效转移到数据库层,在必定水平上进步了可伸缩性。但是,把这部分功效放到数据库层也存在成绩,且成绩的本源与年夜多半干系数据库体系的系统布局有关。关于干系数据库来讲,运转时的主要准绳之一是确保一切的写进操纵不乱、牢靠,因此,一切的功能成绩都与物理上把数据写进磁盘的才能有关。干系数据库力争削减I/O操纵,出格是关于读操纵,但完成该方针的次要路子只是实行一套完成缓冲机制的庞大算法,而这恰是数据库层第一号功能瓶颈一般老是CPU的次要缘故原由。
  一种替换传统干系数据库的计划是,利用在内存中运转的数据库(In-memoryDatabase),比方TimesTen。内存数据库的起点是同意数据一时地写进,但这些数据不用永世地保留到磁盘上,一切的操纵都在内存中举行。如许,内存数据库不必要庞大的算法来削减I/O操纵,并且能够接纳对照复杂的加锁机制,因此速率很快。
  
3、GUI篇
  这一部分先容的内容合适于图形用户界面的使用(Applet和一般使用),要用到AWT或Swing。
  3.1用JAR紧缩类文件
  Java档案文件(JAR文件)是依据JavaBean曜佳顾醯奈募欠⒉JavaBean组件的次要体例和保举体例。JAR档案有助于削减文件体积,延长下载工夫。比方,它有助于Applet进步启动速率。一个JAR文件能够包括一个大概多个相干的Bean和撑持文件,好比图形、声响、HTML和其他资本。
  要在HTML/JSP文件中指定JAR文件,只需在Applet标志中到场ARCHIVE="name.jar"声明。
  请拜见《利用档案文件进步applet的加载速率》。
  3.2提醒Applet装进历程
  你是不是看到过利用Applet的网站,注重到在应当运转Applet的中央呈现了一个占位符?当Applet的下载工夫较长时,会产生甚么事变?最年夜的大概就是用户失落头拜别。在这类情形下,显现一个Applet正鄙人载的信息无疑有助于勉励用户持续守候。
  上面我们来看看一种详细的完成办法。起首创立一个很小的Applet,该Applet卖力在背景下载正式的Applet:
importjava.applet.Applet;
importjava.applet.AppletStub;
importjava.awt.Label;
importjava.awt.Graphics;
importjava.awt.GridLayout;
publicclassPreLoaderextendsAppletimplementsRunnable,AppletStub{
StringlargeAppletName;
Labellabel;
publicvoidinit(){
//请求装载的正式Applet
largeAppletName=getParameter("applet");
//“请稍等”提醒信息
label=newLabel("请稍等..."+largeAppletName);
add(label);
}
publicvoidrun(){
try{
//取得待装载Applet的类
ClasslargeAppletClass=Class.forName(largeAppletName);
//创立待装载Applet的实例
AppletlargeApplet=(Applet)largeAppletClass.newInstance();
//设置该Applet的Stub程序
largeApplet.setStub(this);
//作废“请稍等”信息
remove(label);
//设置结构
setLayout(newGridLayout(1,0));
add(largeApplet);
//显现正式的Applet
largeApplet.init();
largeApplet.start();
}
catch(Exceptionex){
//显现毛病信息
label.setText("不克不及装进指定的Applet");
}
//革新屏幕
validate();
}
publicvoidappletResize(intwidth,intheight){
//把appletResize挪用从stub程序传送到Applet
resize(width,height);
}
}
  编译后的代码小于2K,下载速率很快。代码中有几个中央值得注重。起首,PreLoader完成了AppletStub接口。一样平常地,Applet从挪用者判别本人的codebase。在本例中,我们必需挪用setStub()告知Applet到那里提取这个信息。另外一个值得注重的中央是,AppletStub接口包括很多和Applet类一样的办法,但appletResize()办法除外。这里我们把对appletResize()办法的挪用传送给了resize()办法。
  3.3在画出图形之前事后装进它
  ImageObserver接口可用来吸收图形装进的提醒信息。ImageObserver接口只要一个办法imageUpdate(),可以用一次repaint()操纵在屏幕上画出图形。上面供应了一个例子。
publicbooleanimageUpdate(Imageimg,intflags,intx,inty,intw,inth){
if((flags&ALLBITS)!=0{
repaint();
}
elseif(flags&(ERROR|ABORT))!=0){
error=true;
//文件没有找到,思索显现一个占位符
repaint();
}
return(flags&(ALLBITS|ERROR|ABORT))==0;
}
  当图形信息可用时,imageUpdate()办法被挪用。假如必要进一步更新,该办法前往true;假如所需信息已失掉,该办法前往false。
  3.4掩盖update办法
  update()办法的默许举措是扫除屏幕,然后挪用paint()办法。假如利用默许的update()办法,频仍利用图形的使用大概呈现显现闪灼征象。要制止在paint()挪用之前的屏幕扫除操纵,只需依照以下体例掩盖update()办法:
publicvoidupdate(Graphicsg){
paint(g);
}
  更幻想的计划是:掩盖update(),只重画屏幕上产生变更的地区,以下所示:
publicvoidupdate(Graphicsg){
g.clipRect(x,y,w,h);
paint(g);
}
  3.5提早重画操纵
  关于图形用户界面的使用来讲,功能低下的次要缘故原由常常能够回结为重画屏幕的效力低下。当用户改动窗口巨细大概转动一个窗口时,这一点一般能够很分明地察看到。改动窗口巨细大概转动屏幕之类的操纵招致重画屏幕事务大批地、疾速地天生,乃至凌驾了相干代码的实行速率。凑合这个成绩最好的举措是疏忽一切“早退”的事务。
  倡议在这里引进一个数毫秒的时差,即假如我们当即吸收到了另外一个重画事务,能够中断处置以后事务转而处置最初一个收到的重画事务;不然,我们持续举行以后的重画历程。
  假如事务要启动一项耗时的事情,分别出一个事情线程是一种较好的处置体例;不然,一些部件大概被“解冻”,由于每次只能处置一个事务。上面供应了一个事务处置的复杂例子,但经由扩大后它能够用来把持事情线程。
publicstaticvoidrunOnce(Stringid,finallongmilliseconds){
synchronized(e_queue){//e_queue:一切事务的汇合
if(!e_queue.containsKey(id)){
e_queue.put(token,newLastOne());
}
}
finalLastOnelastOne=(LastOne)e_queue.get(token);
finallongtime=System.currentTimeMillis();//取得以后工夫
lastOne.time=time;
(newThread(){publicvoidrun(){
if(milliseconds>0){
try{Thread.sleep(milliseconds);}//停息线程
catch(Exceptionex){}
}
synchronized(lastOne.running){//守候上一事务停止
if(lastOne.time!=time)//只处置最初一个事务
return;
}
}}).start();
}
privatestaticHashtablee_queue=newHashtable();
privatestaticclassLastOne{
publiclongtime=0;
publicObjectrunning=newObject();
}
  3.6利用双缓冲区
  在屏幕以外的缓冲区画图,完成后当即把全部图形显现出来。因为有两个缓冲区,以是程序能够往返切换。如许,我们能够用一个低优先级的线程卖力绘图,使得程序可以使用余暇的CPU工夫实行其他义务。上面的伪代码片段树模了这类手艺。
GraphicsmyGraphics;
ImagemyOffscreenImage=createImage(size().width,size().height);
GraphicsoffscreenGraphics=myOffscreenImage.getGraphics();
offscreenGraphics.drawImage(img,50,50,this);
myGraphics.drawImage(myOffscreenImage,0,0,this);
  3.7利用BufferedImage
  JavaJDK1.2利用了一个软显现设备,使得文本在分歧的平台上看起来类似。为完成这个功效,Java必需间接处置组成笔墨的像素。因为这类手艺要在内存中大批地举行位复制操纵,初期的JDK在利用这类手艺时功能欠安。为办理这个成绩而提出的Java尺度完成了一种新的图形范例,即BufferedImage。
  BufferedImage子类形貌的图形带有一个可会见的图形数据缓冲区。一个BufferedImage包括一个ColorModel和一组光栅图形数据。这个类一样平常利用RGB(红、绿、蓝)色彩模子,但也能够处置灰度级图形。它的机关函数很复杂,以下所示:
publicBufferedImage(intwidth,intheight,intimageType)
  ImageType同意我们指定要缓冲的是甚么范例的图形,好比5-位RGB、8-位RGB、灰度级等。
  3.8利用VolatileImage
  很多硬件平台和它们的操纵体系都供应基础的硬件减速撑持。比方,硬件减速一样平常供应矩形添补功效,和使用CPU完成统一义务比拟,硬件减速的效力更高。因为硬件减速分别了一部合作作,同意多个事情流并发举行,从而减缓了对CPU和体系总线的压力,使得使用可以运转得更快。使用VolatileImage能够创立硬件减速的图形和办理图形的内容。因为它间接使用低层平台的才能,功能的改良水平次要取决于体系利用的图形适配器。VolatileImage的内容随时大概丧失,也即它是“不不乱的(volatile)”。因而,在利用图形之前,最好反省一下它的内容是不是丧失。VolatileImage有两个可以反省内容是不是丧失的办法:
publicabstractintvalidate(GraphicsConfigurationgc);
publicabstractBooleancontentsLost();
  每次从VolatileImage对象复制内容大概写进VolatileImage时,应当挪用validate()办法。contentsLost()办法告知我们,自从最初一次validate()挪用以后,图形的内容是不是丧失。
  固然VolatileImage是一个笼统类,但不要从它这里派生子类。VolatileImage应当经由过程Component.createVolatileImage()大概GraphicsConfiguration.createCompatibleVolatileImage()办法创立。
  3.9利用WindowBlitting
  举行转动操纵时,一切可见的内容一样平常都要重画,从而招致大批不用要的重画事情。很多操纵体系的图形子体系,包含WIN32GDI、MacOS和X/Windows,都撑持WindowBlitting手艺。WindowBlitting手艺间接在屏幕缓冲区中把图形移到新的地位,只重画新呈现的地区。要在Swing使用中利用WindowBlitting手艺,设置办法以下:
setScrollMode(intmode);
  在年夜多半使用中,利用这类手艺可以进步转动速率。只要在一种情况下,WindowBlitting会招致功能下降,即使用在背景举行转动操纵。假如是用户在转动一个使用,那末它老是在前台,无需忧虑任何负面影响。

但是我同意你的观点,对于大型项目来说,应该是采用框架的一部分,根据功能的不同而改进,欢迎你能再提出些宝贵意见,我会多多学习的。说到jbuilder,我可能是个人感觉,用的时候确实没有vs爽,我最喜欢的IDE是netbeans,谢谢。
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-19 17:39:44 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
爱飞 该用户已被删除
9#
发表于 2015-3-5 23:28:44 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
飘飘悠悠 该用户已被删除
8#
发表于 2015-3-3 14:02:29 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
谁可相欹 该用户已被删除
7#
发表于 2015-2-13 04:56:11 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
冷月葬花魂 该用户已被删除
6#
发表于 2015-2-10 06:58:58 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
小魔女 该用户已被删除
5#
发表于 2015-2-6 11:05:57 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
深爱那片海 该用户已被删除
地板
发表于 2015-2-5 23:59:04 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
蒙在股里 该用户已被删除
板凳
发表于 2015-1-29 07:11:45 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
海妖 该用户已被删除
沙发
发表于 2015-1-24 16:10:24 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
楼主
发表于 2015-1-20 18:27:44 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 11:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表