三山

          java 的學(xué)習(xí)

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            3 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          最近論壇上看到好幾個朋友都在問,如何學(xué)習(xí) Java的問題,“我已經(jīng)學(xué)習(xí)了J2SE,怎么樣才能轉(zhuǎn)向J2EE?”,“我看完了Thinking in Java 可以學(xué)習(xí)J2EE了么?”。于是就有了寫這篇文章的想法,希望能幫助初學(xué)者少走一些彎路。也算是對自己幾年來學(xué)習(xí)Java的一個總結(jié)吧。

          在開始之前有必要再討論一下J2MEJ2SEJ2EE這些概念。J2METhe Micro Edition of the Java 2 Platform。主要用于嵌入式Java,如手機(jī),PDA等等。J2SEJava 2 PlatformStandard Edition,我們通常所說的JDK(Java Development Kit)包含在此,是J2EE的基礎(chǔ)。J2EEJava 2 PlatformEnterprise Edition,就是所謂的企業(yè)級Java。這些只是從API級別上的劃分,實際上SunJ2EE的定義是:開發(fā)基于組件的多層的企業(yè)級應(yīng)用的規(guī)范。也就是為各種不同的技術(shù)定義一個Java的規(guī)范,使這些不同的技術(shù)結(jié)合起來,在Java平臺上構(gòu)建強(qiáng)壯的企業(yè)級應(yīng)用。從這一點來看,J2EE這個概念應(yīng)該是涵蓋J2MEJ2SE的。比如一個典型的J2EE應(yīng)用,網(wǎng)上商店,它支持web方式下訂單,也支持手機(jī)下訂單。顯然必須用到J2SEJ2ME。所以也就不存在所謂的從J2SE轉(zhuǎn)向J2EE的問題了,只是后者包含的范圍更廣而已。

          來看看Sun給出的J2EE 相關(guān)技術(shù)主要分為幾大塊。

          1. Web Service技術(shù)

          -  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. 組件模型技術(shù)(Component Model Technologies
          -  Java Servlet
          -  JavaServer Pages
          -  JavaServer Faces
          -  Enterprise JavaBeans
          -  Java Message Service
          -    J2EE Connector Architecture

          3. 管理技術(shù)(Management Technologies)

          -  J2EE Deployment Specification

          -  J2EE Management Specification

          -  J2EE Client Provisioning

          -    Java Authorization Contract for Containers

          4. 其他相關(guān)技術(shù)(Other J2EE Technologies)

          -  JDBC

          -  Java Data Objects (JDO)

          -  CORBA (Java IDL and Java RMI-IIOP)

          -  JavaMail

          -  Transactions

          如此之多的技術(shù)難免使初學(xué)者無所適從,望而卻步。即使是一位經(jīng)驗豐富的J2EE開發(fā)者,又有幾個人敢說J2EE相關(guān)的技術(shù)我都熟練掌握了。不過作為一名普通J2EE應(yīng)用程序的開發(fā)者來說,我們只需要重點學(xué)習(xí)其中的一部分技術(shù)就可以了,對于其他部分只要做到心中有數(shù),哪天需要用到了知道跑哪里去找到資料就行了。以我個人的觀點,下面這些技術(shù)是一般J2EE應(yīng)用開發(fā)人員所必須熟練掌握的。Java Server PageJava ServletEnterprise JavaBeanJDBCTransactions。還有JAXPXML相關(guān)技術(shù),Java Message ServiceJava MailJDO等等是最好應(yīng)該掌握的。其他Management TechnologiesConnector Architecture等等主要是給容器提供商中間件提供商參考的,應(yīng)用開發(fā)者不需要怎么關(guān)心,等用到了再去學(xué)習(xí)也不遲。

          語言學(xué)習(xí)篇

          首先是J2SE基礎(chǔ)。學(xué)習(xí)一門新技術(shù),無外乎閱讀和實踐了。而一本好的參考書對于初學(xué)者來說顯得格外重要。現(xiàn)在市面上的 Java書籍可以說是鋪天蓋地,質(zhì)量也是良莠不齊,令初學(xué)者無所適從。所以還是先推薦幾本書籍吧。目前對于Java基礎(chǔ)知識,大家一般都比較推薦兩本書,<<Thinking In Java>><< Core Java? 2 Volume I: Fundamentals >>。第一本書不必多說了,Bruce Eckel的大作,Jolt獲獎書籍。內(nèi)容比較全面,基本涵蓋了java語言的方方面面。這本書提供了相當(dāng)豐富的例子,非常有利于對學(xué)習(xí)內(nèi)容的了解。另外書中第一部分對于OO基本書籍的介紹,我覺得對于剛接觸OO的人來說幫助會很大。而且此書是Open Source的,可以從作者網(wǎng)上下載http://www.mindview.net/Books/TIJ/而對于習(xí)慣于讀中文版的學(xué)習(xí)者來說,侯捷翻譯的中文版是不錯的選擇。要說這本說的缺點可能就是對于初學(xué)者來說厚了一點,這也是一些人并不推薦此書作為初學(xué)者學(xué)習(xí)用書的原因吧。后面一本<<Core Java? 2 Volume I: Fundamentals>>,目前已經(jīng)是第七版了,單從它出版的次數(shù)來看也可以看出此書受歡迎的程度,這本書特點也是講述比較全面系統(tǒng),基本上一路啃下來的話Java語言基礎(chǔ)應(yīng)該算過關(guān)了。缺點也是太厚了,有點像參考手冊,前面部分花了不少篇幅講SwingApplet,可能對初學(xué)者不是很有用。還有一些像<< Java in a nutshell>>也是比較不錯的基礎(chǔ)書籍。

          學(xué)習(xí)了基本的語言基礎(chǔ),別忘了最重要也是最有用的資料還是JDK文檔。從你學(xué)習(xí)java的第一天開始JDK文檔應(yīng)該是常備手頭了。如果你碰到問題首先想到的是到論壇上去提問而不是查閱Jdk文檔,那先別繼續(xù)往下學(xué)習(xí)了,學(xué)會查JDK文檔先。不夸張的說在我們的初學(xué)者論壇中60%的問題是光查一下JDK文檔就能解決問題的。最新JDK Documentation下載地址http://java.sun.com/j2se/1.4.2/download.html(目前最新版是J2SE5 http://java.sun.com/j2se/1.5.0/download.jsp)不能光說不練,同一下載頁面把JDK給下載回來。安裝完后有一點我想提一下,安裝路徑下有一個src.zip(有些jdk版本是src.jar),好東西啊---JDK源代碼,老是有人在論壇上問哪里有JDK源代碼下載,你說東西就放在你家里還到處找。有了這個有些問題就需要在論壇上跟人家爭來爭去了,翻開源代碼瞧一下什么疑問都沒有了。幾個最重要的命令行工具是

          javac:           編譯源文件到class文件

          java:             運(yùn)行class

          jar:               打包工具。

          javadoc:        生成java doc的工具。

          對于初學(xué)java的人來說,我不推薦使用IDE而直接用文本編輯器,然后用命令行編譯運(yùn)行。這樣有利于理解CLASSPATHPATH這些最基本概念。CLASSPATH是初學(xué)者比較容易感覺迷惑的地方。現(xiàn)在的IDE太聰明了,給個名字就給你自動生成java source code,自動編譯。可能你運(yùn)行完了你的第一個Hello World程序,還不知道javajavac是用來做什么的。至于實際的項目開發(fā),一款合適的IDE還是十分重要的,我們稍后再對java開發(fā)工具做一些介紹。

          J2EE基礎(chǔ)和Java語言進(jìn)階

          學(xué)習(xí)完語言基礎(chǔ),就可以比較自然地轉(zhuǎn)入J2EE實際技術(shù)的學(xué)習(xí)了。J2EE實在是比較龐雜,而EJBServlet,這些核心技術(shù)是作為每一個J2EE開發(fā)人員所需要掌握的。關(guān)于servlet,我比較推薦<<Core Servlet and JSP 2Edition>><<More Servlets and Java Server Pages>>,第一本是Sun推薦的Servlet教材。第二本是當(dāng)年Amazon最暢銷Java書籍,五星級書籍。這本書機(jī)械工業(yè)出版社有中文版叫<<Servlet JSP權(quán)威指南>>,感覺翻譯得還可以,第二版好像還沒有看到有中文版。兩本書都全面系統(tǒng)地介紹了JSPSevlet知識,從web服務(wù)器配置,JSPServlet基本編程,標(biāo)記庫(Tag Lib),過濾器,事件框架都有很好地描述。提供地例子也比較實用。對于EJB學(xué)習(xí),比較著名有兩本書,<< Enterprise JavaBeans 3nd Edition>><< Mastering Enterprise Java Beans Third Edition>>,兩位作者Richard MonsonEd Roman都是屬于業(yè)界重量級人物。而Richard Monson本身就是EJB規(guī)范專家組成員。對我來說,兩本書難分優(yōu)劣,第二本書有個好處就是可以免費下載http://www.theserverside.com/books/wiley/masteringEJB/index.tss

          還是那句話,不能光說不練,不過J2EE的練習(xí)做起來有一點麻煩,應(yīng)用服務(wù)器是不可少的,最好還得準(zhǔn)備個輕量級的數(shù)據(jù)庫。下面簡單介紹一下這些工具。

          web服務(wù)器(Servlet Container)方面有。

          Tomcat:          http://jakarta.apache.org/tomcat/

          Jetty:              http://jetty.mortbay.org/jetty/

          應(yīng)用服務(wù)器常用的有,

          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

          TomcatJettyJboss都是Open SourceWeblogicWebSphereJ2EE服務(wù)器中的老大級人物,價格也不菲。不過對于開發(fā)者有免費的試用版下載。

          如果單單只是學(xué)習(xí)Servlet,推薦使用Tomcat,它是Sun官方指定的ServletJSP規(guī)范的參考實現(xiàn)。對初學(xué)者最重要的是它使用比較簡單,自帶文檔比較齊全,使用者眾多,有什么問題容易在論壇上面得到幫助。如果學(xué)習(xí)EJB的話,推薦使用Jboss,不僅僅是因為它是Open Source的,主要是配置比較簡單,使用方便。比如說對于連接數(shù)據(jù)庫,對于常用的MySQLOracleMS SQL等等都提供了Sample Config文件,直接拿過來做些小改動扔到Deploy目錄下就可以用DataSource了,部署J2EE應(yīng)用也簡單,把整個.ear或者.war扔到deploy下就可以了。唯一不方便的地方是從Jboss3.0開始,它的文檔開始收費了。但是對于一些基本的配置,在網(wǎng)上還是非常容易找到的,畢竟它太流行了。至于Weblogic,也比較容易使用,不過比起Jboss來個頭大了很多,通過強(qiáng)大的管理界面使得一些常用的配置工作變得十分簡單。和Jboss比起來它的文檔就太多了,簡直是有點羅里八嗦,比如要部署一個.ear文件,一般我們也就是直接扔到domain下的applications目錄下就會自動deploy了,但是要看它的文檔可是長篇大論,容易嚇著初學(xué)者,以為這又是什么高深的學(xué)問。至于WebSphere,個人不推薦初學(xué)者使用,相比前倆個Server比較難使,而且狂吃內(nèi)存。不過在企業(yè)級市場這個家伙表現(xiàn)不俗,畢竟是出生于IBM這樣的豪門。

          數(shù)據(jù)庫方面,目前常見的主要有PostgreSQLMySQLOracleMS SQLDB2等等。前面兩個是開源數(shù)據(jù)庫,后面幾個基本上壟斷著大部分的數(shù)據(jù)庫市場。對于初學(xué)者用來做做EJBJDBC的練習(xí),我推薦MySQL,理由還是很簡單,開源軟件不要錢,個頭小使用方面,用戶眾多文檔齊全。下載地址http://www.mysql.com/products/mysql/PostgreSQL也可以考慮,不過國內(nèi)使用者遠(yuǎn)不如MySQL多,所以要在論壇上問起問題來就少方便一些了,下載地址http://www.pervasive-postgres.com/downloads/。至于后面那些比較重量級的數(shù)據(jù)庫,為了做做練習(xí)而言就不用考慮了, 咱也花不起這個錢啊。

          學(xué)習(xí)完J2EE的這些具體技術(shù),這個時候進(jìn)行基本的J2EE開發(fā)應(yīng)該是不成問題了。此時應(yīng)該考慮提高自己的代碼質(zhì)量了。這里我強(qiáng)烈推薦Martin Fowler<<Refactoring: Improving the Design of Existing Code >>,這本書不是一本非常實際的書,作者完全是手把手地教你如何提高代碼質(zhì)量,從具體地代碼中告訴你什么是代碼的Bad Smell,如何去掉這些Bad Smell。不少書評是這么說的,這本書對于初級,中級的讀者幫助是立桿見影的。至少就我接觸到的幾個學(xué)習(xí)編程不久的程序員,編碼質(zhì)量在短期內(nèi)都有很大提高。當(dāng)然重構(gòu)(Refactoring)這一概念并不只針對Java語言的,它對所有OO語言都是適用的。重構(gòu)的概念是如此深入人心,以至于今天幾乎所有流行的IDE工具都有對重構(gòu)的支持。這里我還想再推薦一本<<Effective Java>>。從C++過來的程序員都知道<<Effective C++>>C++領(lǐng)域的地位,至今還流傳著這樣的趣話,C++程序員分為兩種,一種是讀過<<Effective C++>>的,另一種是沒有讀過C++的。雖然這本<<Effective Java>>Java領(lǐng)域的影響也許沒有那么大,但對于Java程序員絕對有相當(dāng)?shù)闹笇?dǎo)價值。作者是Sun公司的Joshua Blochjava Collection framework的設(shè)計者。作者站在JDK設(shè)計者的角度向你介紹他的Best Practice,應(yīng)該這樣做而不應(yīng)該那樣做,對于JDK中某些API設(shè)計的缺陷他也毫不袒護(hù)的指出。Java語言之父James Gosling為此書寫的前言是這么說的“I sure wish I had had this book ten years ago Some might think that I don't need any Java books but I need this one”。這本書會讓你覺得原來你對Java還是有很多東西不了解的。舉個例子來說,對象的equals方法,我們認(rèn)為它很簡單,也許你每天都在為你新寫的Class重載這個方法,但是你在重載的時候注意過“自反”,“對稱”,“傳遞”這些必須要考慮的因素,你是否同時還小心謹(jǐn)慎的重載了hashcode這個方法?如果沒有,建議你要讀一下這本書。讀完這本書,你會覺得離Java的距離更近了。上面兩本書都出過中文版,后面一本<<Effective Java>>還有兩個版本的中文版,第一次翻譯的比較差一點,后來機(jī)械工業(yè)出版社又委托潘愛民先生重新翻譯了一遍。同一本書在同一個出版社連續(xù)被翻譯了兩次也說明國內(nèi)出版界對這本書還是比較重視的。

          這個階段,在看書的同時,可以結(jié)合著學(xué)習(xí)一些優(yōu)秀的開源項目的源代碼。這些開源項目的代碼風(fēng)格,注釋都是值得借鑒的。實在太懶也別忘了手頭上還有個Jdk的源代碼。其實也不用刻意去找源代碼,在實際的J2EE項目開發(fā)中,基本上都會用到一些優(yōu)秀的開源項目。Framework可能會用到SpringStrutsLog機(jī)制基本上都會JarkartaCommons Log或者Log4j,單元測試會大多會用Junit,結(jié)合項目閱讀一下其中的一些源代碼,既可以提高自己又對項目會有所幫助,說不定因此而得到PM的賞識呢。一舉兩得,何樂而不為呢。呵呵,有點扯遠(yuǎn)了。過了初學(xué)者階段,該學(xué)會如何找到適合自己的Java書籍了。歷經(jīng)數(shù)十載,今天的Java技術(shù)已經(jīng)變的如此之龐雜,我相信即使窮凈一個人畢生之精力也不可能把Java所有的相關(guān)技術(shù)都學(xué)通,何況新技術(shù)還在層出不窮地推出,3年之前誰會知道Struts會成為Web框架事實上的工業(yè)標(biāo)準(zhǔn)。2年之前誰會知道Hibernate會在今天獨領(lǐng)風(fēng)騷。既然已經(jīng)不能指望一次性把java技術(shù)的方方面面都學(xué)個通,在實際中也只能是需要什么技術(shù)再學(xué)習(xí)什么技術(shù)了。而能否選擇一本好的參考書籍帶來的就是事半功倍和事倍工半的效果。所以我覺得花點時間放在選擇書籍上面還是很值得的,否則你在后面只會花更多的時間。下面我談?wù)勛约哼x擇書籍的一些經(jīng)驗,不一定正確。首先看作者,像上面提到的那些書的作者,都是業(yè)界鼎鼎大名的,選擇他們的書一般錯不了。大家看的書多了,自己胸中自然也會有一個list,哪些作者是信得過的。二看出版社,計算機(jī)書籍方面,OreillyAddison-Wesley都是公認(rèn)比較好的出版社。對于目前比較流行的Java技術(shù),Oreilly<<XXXX  in  Action>>系列是不錯的選擇。另外我還會去看看Amazon網(wǎng)站(http://www.amazon.com/)的書評,一般小于3星級的書我都不會考慮。還有一個好去處theserversidehttp://www.theserverside.com/的書評,這里的書評比較有趣,往往都有很激烈的爭論,里面經(jīng)常會看到一些名人在發(fā)言。我要向所有Java學(xué)習(xí)者推薦,如果我的收藏夾里面只能存放兩個網(wǎng)站,我會選擇java.suntheserverside。在這里你可以了解最新的Java動態(tài),可以學(xué)習(xí)第一手的Java資料,可以看到Java高手們(里面不乏業(yè)界大腕)激烈辯論。

          到此階段,Java Developer的基本功底應(yīng)該算是打好了吧,往后就是不斷學(xué)習(xí)嘍。結(jié)束這一段之前,最后再介紹一本書Oreilly<<Java Threads Second Edition >>,因為我覺得多線程編程屬于Java基本功,每一個想學(xué)好Java的人都應(yīng)該好好掌握。

          提高篇

          在這個階段應(yīng)該從軟件架構(gòu),Framework層次上來學(xué)習(xí)了。作為面向?qū)ο蟮氖ソ?jīng)<<Design Patterns>> 這本書是不得不推薦的。不用再多說了,這本在面向?qū)ο箢I(lǐng)域地位完全是屬于教父級別的。不管你學(xué)習(xí)的是什么OO語言,不管你現(xiàn)在是用.Net還是J2EE開發(fā),這本書都是你進(jìn)階之路上的必讀之書。而<<Core J2EE Patterns>>則專門針對于J2EE來討論設(shè)計模式,書中Sun Java Center的資深設(shè)計師描述了J2EE關(guān)鍵技術(shù)的模式。最佳實踐,設(shè)計策略和經(jīng)過驗證的解決方案。對于每一個希望成為J2EE 架構(gòu)師或者設(shè)計師,這本書值得一讀。學(xué)習(xí)設(shè)計模式的時候,建議是結(jié)合實際的源代碼來看,比如看看Junit源代碼,你可以看到很多設(shè)計模式優(yōu)雅的實現(xiàn),作者之一Erich Gamma本身就是<<Design Patterns>>的作者。至于J2EE的設(shè)計模式,Sun還開辟了專門的空間http://java.sun.com/blueprints/patterns/,里面有對常用模式的討論又提供了詳細(xì)的源代碼樣例。正如Grady Booch所說,模式對于普遍問題提供了通用的解決方案,利用模式就等于擁有一個強(qiáng)大的專家隊伍。如果你還沒有學(xué)習(xí),現(xiàn)在就開始吧。此外對于面向?qū)ο蠓椒ㄕ摚瑯O限編程的思想也應(yīng)該有所了解http://www.extremeprogramming.org/。對于J2EE項目的具體實施,Rod Johnson<<Expert One-on-One J2EE Design and Development (Programmer to Programmer)>>也很有價值,該書以作者豐富的實戰(zhàn)經(jīng)驗向我們展示如何用盡可能簡單的解決方案構(gòu)建J2EE 應(yīng)用,書中作者第一次提出這樣的觀點,很多時候,J2EE應(yīng)用完全沒有必要用到EJB,對于言必稱EJB的廣大J2EE開發(fā)者來說,怎么說也有點驚世咳俗的味道。當(dāng)然,作為ServletJDO兩個專家組的成員,這可不是作者信口胡騶的。今天風(fēng)靡Java世界的Spring框架最初便是源于此書,而IOCAOP等概念更是被時下的java開發(fā)者掛在嘴邊。最后,作為對Java的深入學(xué)習(xí),Java技術(shù)的各個Specification也有必要一讀。暫時就寫到這里吧。

          posted on 2005-10-24 20:08 李兵的空間 閱讀(697) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南安市| 大化| 鄂伦春自治旗| 喀喇| 大足县| 浦东新区| 淄博市| 海口市| 上蔡县| 洞口县| 临沂市| 马尔康县| 河北省| 阳高县| 敖汉旗| 长治县| 台中县| 龙陵县| 崇左市| 阜宁县| 曲水县| 孙吴县| 彰武县| 修文县| 营口市| 白玉县| 金乡县| 阿勒泰市| 嘉义市| 桑植县| 镇原县| 高密市| 凤庆县| 彩票| 丹东市| 新泰市| 社旗县| 衡南县| 忻城县| 平原县| 太和县|