??xml version="1.0" encoding="utf-8" standalone="yes"?>
如何学习Java
Tag:学习Java
一、前a
在开始之前有必要再讨Z下J2MEQJ2SEQJ2EEq些概念。J2MEQThe Micro Edition of the Java 2 Platform。主要用于嵌入式JavaQ如手机QPDA{等。J2SEQJava 2 PlatformQStandard EditionQ我们通常所说的JDK(Java Development Kit)包含在此Q是J2EE的基。J2EEQJava 2 PlatformQEnterprise EditionQ就是所谓的企业UJava。这些只是从APIU别上的划分Q实际上SunlJ2EE的定义是Q开发基于组件的多层的企业应用的规范。也是为各U不同的技术定义一个Java的规范,使这些不同的技术结合v来,在Javaq_上构建强壮的企业U应用。从q一Ҏ看,J2EEq个概念应该是涵盖J2MEQJ2SE的。比如一个典型的J2EE应用Q网上商店,它支持web方式下订单,也支持手Z订单。显然必ȝ到J2SEQJ2ME。所以也׃存在所谓的从J2SE转向J2EE的问题了Q只是后者包含的范围更广而已?/p>
来看看Sunl出的J2EE 相关技术主要分为几大块?/p>
1. Web Service技?/p>
- Java API for XML Processing (JAXP)
- Java API for XML Registries (JAXR)
- Java API for XML-based RPC (JAX-RPC)
- SOAP with Attachments API for Java (SAAJ)
2. lg模型技术(Component Model TechnologiesQ?/p>
- Java Servlet
- JavaServer Pages
- JavaServer Faces
- Enterprise JavaBeans
- Java Message Service
- J2EE Connector Architecture
3. 理技?Management Technologies)
- J2EE Deployment Specification
- J2EE Management Specification
- J2EE Client Provisioning
- Java Authorization Contract for Containers
4. 其他相关技?Other J2EE Technologies)
- JDBC
- Java Data Objects (JDO)
- CORBA (Java IDL and Java RMI-IIOP)
- JavaMail
- Transactions
如此之多的技术难免初学者无所适从Q望而却步。即使是一位经验丰富的J2EE开发者,又有几个人敢说J2EE相关的技术我都熟l掌握了。不q作Z名普通J2EE应用E序的开发者来_我们只需要重点学习其中的一部分技术就可以了,对于其他部分只要做到心中有数Q哪天需要用C知道跑哪里去扑ֈ资料p了。以我个人的观点Q下面这些技术是一般J2EE应用开发h员所必须熟练掌握的。Java Server PageQJava ServletQEnterprise JavaBeanQJDBCQTransactions。还有JAXP{XML相关技术,Java Message ServiceQJava MailQJDO{等是最好应该掌握的。其他Management TechnologiesQConnector Architecture{等主要是给容器提供商中间g提供商参考的Q应用开发者不需要怎么兛_Q等用到了再d习也不迟?/p>
二、语a学习?/p>
首先是J2SE基础。学习一门新技术,无外乎阅d实践了。而一本好的参考书对于初学者来说显得格外重要。现在市面上?Java书籍可以说是铺天盖地Q质量也是良莠不齐,令初学者无所适从。所以还是先推荐几本书籍吧。目前对于Java基础知识Q大家一般都比较推荐两本?lt;>?lt;< Core Java? 2Q?Volume I: Fundamentals >>。第一本书不必多说了,Bruce Eckel的大作,Jolt获奖书籍。内Ҏ较全面,基本늛了java语言的方斚w面。这本书提供了相当丰富的例子Q非常有利于对学习内容的了解。另外书中第一部分对于OO基本书籍的介l,我觉得对于刚接触QO的h来说帮助会很大。而且此书是Open Source的,可以从作者网上下?a >http://www.mindview.net/Books/TIJ/而对于习惯于M文版的学习者来_侯捷译的中文版是不错的选择。要说这本说的缺点可能就是对于初学者来说厚了一点,q也是一些hq不推荐此书作ؓ初学者学习用书的原因吧。后面一?lt;< Core Java? 2Q?Volume I: Fundamentals >>。目前已l是W七版了Q单从它出版的次数来看也可以看出此书受欢q的E度Q这本书特点也是讲述比较全面pȝQ基本上一路啃下来的话Java语言基础应该过关了。缺点也是太厚了Q有点像参考手册,前面部分׃不少幅讲Swing和AppletQ可能对初学者不是很有用。还有一些像<< Java in a nutshell>>也是比较不错的基书籍?/p>
学习了基本的语言基础Q别忘了最重要也是最有用的资料还是JDK文档。从你学习java的第一天开始JDK文档应该是常备手头了。如果你到问题首先惛_的是到论坛上L问而不是查阅Jdk文档Q那先别l箋往下学习了Q学会查JDK文档先。不夸张的说在我们的初学者论坛中60%的问题是光查一下JDK文档p解决问题的。最新JDK Documentation下蝲地址http://java.sun.com/j2se/1.4.2/download.html(目前最新版是J2SE5 http://java.sun.com/j2se/1.5.0/download.jsp)不能光说不练Q同一下蝲面把JDKl下载回来。安装完后有一Ҏx一下,安装路径下有一个src.zip(有些jdk版本是src.jar)Q好东西?--JDK源代码,老是有h在论坛上问哪里有JDK源代码下载,你说东西放在你安q到处找。有了这个有些问题就需要在论坛上跟人家争来争去了,d源代码瞧一下什么疑问都没有了。几个最重要的命令行工具?/p>
javac: ~译源文件到class文g
java: q行class
jar: 打包工具?/p>
javadoc: 生成java doc的工兗?/p>
对于初学java的h来说Q我不推荐用IDE而直接用文本~辑器,然后用命令行~译q行。这h利于理解CLASSPATHQPATHq些最基本概念。CLASSPATH是初学者比较容易感觉迷惑的地方。现在的IDE太聪明了Q给个名字就l你自动生成java source codeQ自动编译。可能你q行完了你的W一个Hello WorldE序Q还不知道java和javac是用来做什么的。至于实际的目开发,一Ƒ适的IDEq是十分重要的,我们E后再对java开发工具做一些介l?
三、J2EE基础和Java语言q阶
学习完语a基础Q就可以比较自然地{入J2EE实际技术的学习了。J2EE实在是比较庞杂,而EJBQServletQ这些核心技术是作ؓ每一个J2EE开发h员所需要掌握的。关于servletQ我比较推荐<>?lt;>Q第一本是Sun推荐的Servlet教材。第二本是当qAmazon最畅销Java书籍Q五星书籍。这本书机械工业出版C有中文版叫<<与JSP权威指南>>Q感觉翻译得q可以,W二版好像还没有看到有中文版。两本书都全面系l地介绍了JSP和Sevlet知识Q从web服务器配|,JSPQServlet基本~程Q标记库(Tag Lib)Q过滤器Q事件框枉有很好地描述。提供地例子也比较实用。对于EJB学习Q比较著名有两本书,<< Enterprise JavaBeansQ?3nd Edition>>?lt;< Mastering Enterprise Java Beans Third Edition>>Q两位作者Richard MonsonQEd Roman都是属于业界重量Uh物。而Richard Monson本n是EJB规范专家l成员。对我来_两本书难分优劣,W二本书有个好处是可以免费下蝲http://www.theserverside.com/books/wiley/masteringEJB/index.tss?/p>
q是那句话,不能光说不练Q不qJ2EE的练习做h有一炚w烦,应用服务器是不可的Q最好还得准备个轻量U的数据库。下面简单介l一下这些工兗?/p>
web服务?Servlet Container)斚w有:
Tomcat: http://jakarta.apache.org/tomcat/
Jetty: http://jetty.mortbay.org/jetty/
应用服务器常用的有:
Jboss: http://www.jboss.org/products/index
Weblogic: http://www.bea.com/framework.jsp?CNT=index.htm&FP=/content/products/server
WebSphere: http://www-128.ibm.com/developerworks/downloads/ws/was/?S_TACT=105AGX28&S_CMP=DLMAIN?/p>
TomcatQJettyQJboss都是Open Source。Weblogic和WebSphere是J2EE服务器中的老大Uh物,h也不菌Ӏ不q对于开发者有免费的试用版下蝲?/p>
如果单单只是学习ServletQ推荐用TomcatQ它是Sun官方指定的ServletQJSP规范的参考实现。对初学者最重要的是它用比较简单,自带文档比较齐全Q用者众多,有什么问题容易在论坛上面得到帮助。如果学习EJB的话Q推荐用JbossQ不仅仅是因为它是Open Source的,主要是配|比较简单,使用方便。比如说对于q接数据库,对于常用的MySQLQOracleQMS SQL{等都提供了Sample Config文gQ直接拿q来做些改动扔到Deploy目录下就可以用DataSource了,部vJ2EE应用也简单,把整?ear或?war扔到deploy下就可以了。唯一不方便的地方是从Jboss3.0开始,它的文档开始收费了。但是对于一些基本的配置Q在|上q是非常Ҏ扑ֈ的,毕竟它太行了。至于WeblogicQ也比较Ҏ使用Q不q比起Jboss来个头大了很多,通过强大的管理界面得一些常用的配置工作变得十分单。和Jboss比v来它的文档就太多了,直是有点|里八嗦Q比如要部v一?ear文gQ一般我们也是直接扔到domain下的applications目录下就会自动deploy了,但是要看它的文档可是长篇大论Q容易吓着初学者,以ؓq又是什么高q学问。至于WebSphereQ个Z推荐初学者用,相比前俩个Server比较难Q而且狂吃内存。不q在企业U市个家伙表C俗,毕竟是出生于IBMq样的豪门?/p>
数据库方面,目前常见的主要有PostgreSQLQMySQLQOracleQMS SQLQDB2{等。前面两个是开源数据库Q后面几个基本上垄断着大部分的数据库市场。对于初学者用来做做EJBQJDBC的练习,我推荐MySQLQ理p是很单,开源Y件不要钱Q个头小使用斚wQ用户众多文档齐全。下载地址http://www.mysql.com/products/mysql/。PostgreSQL也可以考虑Q不q国内用者远不如MySQL多,所以要在论坛上问v问题来就方便一些了Q下载地址http://www.pervasive-postgres.com/downloads/。至于后面那些比较重量的数据库Qؓ了做做练习而言׃用考虑了, ׃׃赯个钱啊?/p>
学习完J2EE的这些具体技术,q个时候进行基本的J2EE开发应该是不成问题了。此时应该考虑提高自己的代码质量了。这里我强烈推荐Martin Fowler?lt;>Q这本书不是一本非常实际的书,作者完全是手把手地教你如何提高代码质量Q从具体C码中告诉你什么是代码的Bad SmellQ如何去掉这些Bad Smell。不书评是q么说的Q这本书对于初Q中U的读者帮助是立杆见媄的。至就我接触到的几个学习编E不久的E序员,~码质量在短期内都有很大提高。当焉?Refactoring)q一概念q不只针对Java语言的,它对所有OO语言都是适用的。重构的概念是如此深入h心,以至于今天几乎所有流行的IDE工具都有寚w构的支持。这里我q想再推荐一?lt;>。从C++q来的程序员都知?lt;>在C++领域的地位,至今q流传着q样的趣话,C++E序员分ZU,一U是读过<>的,另一U是没有读过C++的。虽然这?lt;>在Java领域的媄响也许没有那么大Q但对于JavaE序员绝Ҏ相当的指gh倹{作者是Sun公司的Joshua BlochQjava Collection framework的设计者。作者站在JDK设计者的角度向你介绍他的Best PracticeQ应该这样做而不应该那样做,对于JDK中某些API设计的缺陷他也毫不袒护的指出。Java语言之父James Gosling为此书写的前a是这么说的“I sure wish I had had this book ten years ago?Some might think that I don't need any Java booksQ?but I need this one”。这本书会让你觉得原来你对Javaq是有很多东西不了解的。D个例子来_对象的equalsҎQ我们认为它很简单,也许你每天都在ؓ你新写的Class重蝲q个ҎQ但是你在重载的时候注意过“自反”,“对U”,“传递”这些必要考虑的因素,你是否同时还心谨慎的重载了hashcodeq个ҎQ如果没有,你要M下这本书。读完这本书Q你会觉得离Java的距Lq了。上面两本书都出q中文版Q后面一?lt;>q有两个版本的中文版Q第一ơ翻译的比较差一点,后来机械工业出版C֏委托潘爱民先生重新翻译了一遍。同一本书在同一个出版社q箋被翻译了两次也说明国内出版界对这本书q是比较重视的?/p>
q个阶段Q在看书的同Ӟ可以l合着学习一些优U的开源项目的源代码。这些开源项目的代码风格Q注释都是值得借鉴的。实在太懒也别忘了手头上q有个Jdk的源代码。其实也不用LL源代码,在实际的J2EE目开发中Q基本上都会用到一些优U的开源项目。Framework可能会用到SpringQStrutsQLog机制基本上都会JarkartaCommons Log或者Log4jQ单元测试会大多会用JunitQ结合项目阅M下其中的一些源代码Q既可以提高自己又对目会有所帮助Q说不定因此而得到PM的赏识呢。一举两得,何乐而不为呢。呵呵,有点扯远了。过了初学者阶D,该学会如何找到适合自己的Java书籍了。历l数十蝲Q今天的Java技术已l变的如此之庞杂Q我怿即ɽI净一个h毕生之精力也不可能把Java所有的相关技术都学通,何况新技术还在层ZI地推出Q?q之前谁会知道Struts会成为Web框架事实上的工业标准?q之前谁会知道Hibernate会在今天独领风骚。既然已l不能指望一ơ性把java技术的Ҏ面面都学个通,在实际中也只能是需要什么技术再学习什么技术了。而能否选择一本好的参考书c带来的是事半功倍和事倍工半的效果。所以我觉得q旉攑֜选择书籍上面q是很值得的,否则你在后面只会花更多的旉。下面我谈谈自己选择书籍的一些经验,不一定正。首先看作者,像上面提到的那些书的作者,都是业界鼎鼎大名的,选择他们的书一般错不了。大家看的书多了Q自p中自然也会有一个listQ哪些作者是信得q的。二看出版社Q计机书籍斚wQOreillyQAddison-Wesley都是公认比较好的出版C。对于目前比较流行的Java技术,Oreilly?lt;>pd是不错的选择。另外我q会ȝ看Amazon|站(http://www.amazon.com/)的书评,一般小?星的书我都不会考虑。还有一个好dhttp://www.theserverside.com/的书评,q里的书评比较有,往往都有很激烈的争论Q里面经怼看到一些名人在发言。我要向所有Java学习者推荐,如果我的收藏多w面只能存放两个网站,我会选择java.sun和theserverside。在q里你可以了解最新的Java动态,可以学习W一手的Java资料Q可以看到Java高手?里面不乏业界大腕)Ȁ烈辩论?/p>
到此阶段QJava Developer的基本功底应该算是打好了吧,往后就是不断学习喽。结束这一D之前,最后再介绍一本书Oreilly?lt;>Q因为我觉得多线E编E属于Java基本功,每一个想学好Java的h都应该好好掌握?/p>
四、提高篇
在这个阶D应该从软g架构QFramework层次上来学习了。作为面向对象的圣经<>Q?q本书是不得不推荐的。不用再多说了,q本在面向对象领域地位完全是属于教父U别的。不你学习的是什么OO语言Q不你现在是用.Netq是J2EE开发,q本书都是你q阶之\上的必读之书。?lt;>则专门针对于J2EE来讨计模式,书中Sun Java Center的资p计师描述了J2EE关键技术的模式。最佛_践,设计{略和经q验证的解决Ҏ。对于每一个希望成为J2EE 架构师或者设计师Q这本书值得一诅R学习设计模式的时候,是结合实际的源代码来看,比如看看Junit源代码,你可以看到很多设计模式优雅的实现Q作者之一Erich Gamma本n是<>的作者。至于J2EE的设计模式,Sunq开辟了专门的空?a >http://java.sun.com/blueprints/patterns/Q里面有对常用模式的讨论又提供了详细的源代码样例。正如Grady Booch所_模式对于普遍问题提供了通用的解x案,利用模式q于拥有一个强大的专家队伍。如果你q没有学习,现在开始吧。此外对于面向对象方法论Q极限编E的思想也应该有所了解http://www.extremeprogramming.org/。对于J2EE目的具体实施,Rod Johnson?lt;>也很有h|该书以作者丰富的实战l验向我们展C如何用可能简单的解决Ҏ构徏J2EE 应用Q书中作者第一ơ提L观点Q很多时候,J2EE应用完全没有必要用到EJBQ对于言必称EJB的广大J2EE开发者来_怎么说也有点惊世咳俗的味道。当Ӟ作ؓServlet和JDO两个专家l的成员Q这可不是作者信口胡驺的。今天风靡Java世界的Spring框架最初便是源于此书,而IOCQAOP{概忉|是被时下的java开发者挂在嘴辏V最后,作ؓ对Java的深入学习,Java技术的各个Specification也有必要一诅R暂时就写到q里吧?/p>
五、结?/p>
怿大家看了q篇文章后会有较大的提高Q如果你想了解更多的关于Java斚w的知识,你可以浏览“Java学习W记”(http://sylan215.bokee.com/Q网站,对于学习JavaQ这是一个相当不错的选择?/p>
Web Server
是网l编E的基础。推荐?/span>
Apache
Q它是免费的Qƈ可运行在多种q_上?/span>
推荐安装和调试时_
2
天?/span>
2
Q理?/span>
HTML/XHTML/JavaScript(
JavaScript
?/span>
HTML
一起学?/span>
)
?/span>
使用
JSP
?/span>
HTML
混合~程Q精?/span>
HTML
语法是非帔R要的Q因此花些时间来学习和写
HTML
语法是必要的
JavaScript
作ؓ目前最实用的客L~程工具Q对学习
JSP
有重要意义?/span>
JavaScript
不能被认为成?/span>
Java
的网l版Q它在表单验证、框架处理等斚w有独C处。通过学习
JavaScript
可以单了?/span>
Java
面向对象的语法特点,因此
JavaScript
对开发一个优U?/span>
JSP
面有着极ؓ重要的帮助?/span>
训练旉Q?/span>
4
?/span>
7
周?/span>
推荐书籍
Q?/span>
HTML
?/span>
XHTML
权威指南Q中国电力出版社Q?/span>
XHTML
初~程Q机械工业出版社Q?/span>
JavaScript
权威指南Q中国电力出版社Q?/span>
JavaScript
开发用手册(机械工业出版C)
3
Q开始学?/span>
Java
不必太多介绍Q如果你学好q门语言Q前途一定不差?/span>
训练旉Q?/span>
4
?/span>
7
周?/span>
推荐书籍
Q?/span>
think in java 2(
机械工业出版C?/span>
)
JAVA
技术手册(中国电力出版C)
Java
夜未眠(电子工业出版C)
4
Q学习ƈ理解
Web Server
的细?/span>
首先应理?/span>
Web
的基本工作原理,了解q分清楚
Web
定义的两个方面:
Web
的客L和服务器端,q知道两者是如何通讯的。其ơ熟?/span>
Web Server
的特征?/span>
训练旉Q?/span>
2
天?/span>
5
Q徏?/span>
JSP Server
推荐
Tomcat
Q因为它完全免费Qƈ可以很好的运?/span>
JSP
E序。?/span>
Tomcat
遇到问题Ӟ可以很容易的获得相关的帮助(?/span>
Tomcat
的官方网站你可以获得许多技术支持,但前提你的英文还不错Q?/span>
安装旉Q?/span>
1
?/span>
2
天?/span>
6
Q开始学?/span>
JSP
l过以上步骤Q?/span>
JSP
的基学习已基本完成。现在可以?/span>
JSP
写程序来实际l习。另一个学?/span>
JSP
的方法是学习怎样创徏一个分布式的应用程序?/span>
l过以上学习Q我们已l可以完成一?/span>
JSP Web
的应用程序了Q如Q?/span>
Hello World
”)?/span>
如果出错的话Q先查你?/span>
JDK
?/span>
Tomcat
的环境变量配|是否正,其次?/span>
Tomcat
是否已经启动?/span>
训练旉Q?/span>
4
?/span>
6
周?/span>
推荐书籍
Q?/span>
JSP
设计Q中国电力出版社Q?/span>
JSP
变成指南Q第二版Q(电子工业出版C)
7
Q学习更多的
JSP Server
很多
JSP Server
都有自己的一些优U特征Q可以更L的开?/span>
JSP
。徏议深入学?/span>
JSP server
Q可以优?/span>
JSP
应用E序Qƈ使之q行的更快而不出问题?/span>
训练旉Q?/span>
2
?/span>
7
天?/span>
推荐书籍
Q?/span>
JSP
站点设计变成指南Q电子工业出版社Q?/span>
8
Q学?/span>
JDBC
JSP
的大多数应用需要用数据库?/span>
JDBC
可以很好的用?/span>
JSP
中的数据库连接。了解和熟悉
JSP
上被采用?/span>
JDBC Driver
的细节是很重要的。一定要熟悉
JDBC
中所定义的主要接口和cR?/span>
学习初期推荐使用
MySQL
Q短精悍,Ҏ上手。这期间你也要学?/span>
SQL
语句Q等你真正熟悉了q方面的知识可以考虑用一些企业的大型数据库了?/span>
训练旉Q?/span>
2
?/span>
3
周?/span>
推荐书籍Q?/span>
JDBC
?/span>
JAVA
数据库编E(W二版)Q中国电力出版社Q?/span>
MySQL
|络数据库指南(不必_读Q?/span>
xQ你一成ؓ一个熟l的
JSP
E序员了?/span>
5
?/span>
6
个月的时间可以训l一个h成ؓ一?/span>
JSP
E序员了Q但要成为高手,你还有很长的路要走。可以考虑扩展的知识面Q?/span>
DHTML
Q?/span>
XML
Q?/span>
EJB
{等?/span>