快速學習JAVA

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


在開始之前有必要再討論一下J2ME,J2SE,J2EE這些概念。J2ME,The Micro Edition of the Java 2 Platform。主要用於嵌入式Java,如手機,PDA等等。J2SE,Java 2 Platform,Standard Edition,我們通常所說的JDK(Java Development Kit)包含在此,是J2EE的基礎。J2EE,Java 2 Platform,Enterprise Edition,就是所謂的企業級Java。這些只是從API級別上的劃分,實際上Sun給J2EE的定義是:開發基於組件的多層的企業級應用的規範。也就是爲各種不同的技術定義一個Java的規範,使這些不同的技術結合起來,在Java平臺上構建強壯的企業級應用。從這一點來看,J2EE這個概念應該是涵蓋J2ME,J2SE的。比如一個典型的J2EE應用,網上商店,它支持web方式下訂單,也支持手機下訂單。顯然必須用到J2SE,J2ME。所以也就不存在所謂的從J2SE轉向J2EE的問題了,只是後者包含的範圍更廣而已。

來看看Sun給出的J2EE 相關技術主要分爲幾大塊。

1. Web Service技術

- 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. 組件模型技術(Component Model Technologies)

- 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

如此之多的技術難免使初學者無所適從,望而卻步。即使是一位經驗豐富的J2EE開發者,又有幾個人敢說J2EE相關的技術我都熟練掌握了。不過作爲一名普通J2EE應用程序的開發者來說,我們只需要重點學習其中的一部分技術就可以了,對於其他部分只要做到心中有數,哪天需要用到了知道跑哪裏去找到資料就行了。以我個人的觀點,下面這些技術是一般J2EE應用開發人員所必須熟練掌握的。Java Server Page,Java Servlet,Enterprise JavaBean,JDBC,Transactions。還有JAXP等XML相關技術,Java Message Service,Java Mail,JDO等等是最好應該掌握的。其他Management Technologies,Connector Architecture等等主要是給容器提供商中間件提供商參考的,應用開發者不需要怎麼關心,等用到了再去學習也不遲。

語言學習篇

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

學習了基本的語言基礎,別忘了最重要也是最有用的資料還是JDK文檔。從你學習java的第一天開始JDK文檔應該是常備手頭了。如果你碰到問題首先想到的是到論壇上去提問而不是查閱Jdk文檔,那先別繼續往下學習了,學會查JDK文檔先。不誇張的說在我們的初學者論壇中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:       運行class

jar:        打包工具。

javadoc:    生成java doc的工具。

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

J2EE基礎和Java語言進階

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

還是那句話,不能光說不練,不過J2EE的練習做起來有一點麻煩,應用服務器是不可少的,最好還得準備個輕量級的數據庫。下面簡單介紹一下這些工具。

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

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。

Tomcat,Jetty,Jboss都是Open Source。Weblogic和WebSphere是J2EE服務器中的老大級人物,價格也不菲。不過對於開發者有免費的試用版下載。

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

數據庫方面,目前常見的主要有PostgreSQL,MySQL,Oracle,MS SQL,DB2等等。前面兩個是開源數據庫,後面幾個基本上壟斷着大部分的數據庫市場。對於初學者用來做做EJB,JDBC的練習,我推薦MySQL,理由還是很簡單,開源軟件不要錢,個頭小使用方面,用戶衆多文檔齊全。下載地址http://www.mysql.com/products/mysql/。PostgreSQL也可以考慮,不過國內使用者遠不如MySQL多,所以要在論壇上問起問題來就少方便一些了,下載地址http://www.pervasive-postgres.com/downloads/。至於後面那些比較重量級的數據庫,爲了做做練習而言就不用考慮了, 咱也花不起這個錢啊。

學習完J2EE的這些具體技術,這個時候進行基本的J2EE開發應該是不成問題了。此時應該考慮提高自己的代碼質量了。這裏我強烈推薦Martin Fowler的<<Refactoring: Improving the Design of Existing Code >>,這本書不是一本非常實際的書,作者完全是手把手地教你如何提高代碼質量,從具體地代碼中告訴你什麼是代碼的Bad Smell,如何去掉這些Bad Smell。不少書評是這麼說的,這本書對於初級,中級的讀者幫助是立杆見影的。至少就我接觸到的幾個學習編程不久的程序員,編碼質量在短期內都有很大提高。當然重構(Refactoring)這一概念並不只針對Java語言的,它對所有OO語言都是適用的。重構的概念是如此深入人心,以至於今天幾乎所有流行的IDE工具都有對重構的支持。這裏我還想再推薦一本<<Effective Java>>。從C++過來的程序員都知道<<Effective C++>>在C++領域的地位,至今還流傳着這樣的趣話,C++程序員分爲兩種,一種是讀過<<Effective C++>>的,另一種是沒有讀過C++的。雖然這本<<Effective Java>>在Java領域的影響也許沒有那麼大,但對於Java程序員絕對有相當的指導價值。作者是Sun公司的Joshua Bloch,java Collection framework的設計者。作者站在JDK設計者的角度向你介紹他的Best Practice,應該這樣做而不應該那樣做,對於JDK中某些API設計的缺陷他也毫不袒護的指出。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方法,我們認爲它很簡單,也許你每天都在爲你新寫的Class重載這個方法,但是你在重載的時候注意過“自反”,“對稱”,“傳遞”這些必須要考慮的因素,你是否同時還小心謹慎的重載了hashcode這個方法?如果沒有,建議你要讀一下這本書。讀完這本書,你會覺得離Java的距離更近了。上面兩本書都出過中文版,後面一本<<Effective Java>>還有兩個版本的中文版,第一次翻譯的比較差一點,後來機械工業出版社又委託潘愛民先生重新翻譯了一遍。同一本書在同一個出版社連續被翻譯了兩次也說明國內出版界對這本書還是比較重視的。

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

到此階段,Java Developer的基本功底應該算是打好了吧,往後就是不斷學習嘍。結束這一段之前,最後再介紹一本書Oreilly的<<Java Threads, Second Edition >>,因爲我覺得多線程編程屬於Java基本功,每一個想學好Java的人都應該好好掌握。

提高篇

在這個階段應該從軟件架構,Framework層次上來學習了。作爲面向對象的聖經<<Design Patterns>>, 這本書是不得不推薦的。不用再多說了,這本在面向對象領域地位完全是屬於教父級別的。不管你學習的是什麼OO語言,不管你現在是用.Net還是J2EE開發,這本書都是你進階之路上的必讀之書。而<<Core J2EE Patterns>>則專門針對於J2EE來討論設計模式,書中Sun Java Center的資深設計師描述了J2EE關鍵技術的模式。最佳實踐,設計策略和經過驗證的解決方案。對於每一個希望成爲J2EE 架構師或者設計師,這本書值得一讀。學習設計模式的時候,建議是結合實際的源代碼來看,比如看看Junit源代碼,你可以看到很多設計模式優雅的實現,作者之一Erich Gamma本身就是<<Design Patterns>>的作者。至於J2EE的設計模式,Sun還開闢了專門的空間http://java.sun.com/blueprints/patterns/,裏面有對常用模式的討論又提供了詳細的源代碼樣例。正如Grady Booch所說,模式對於普遍問題提供了通用的解決方案,利用模式就等於擁有一個強大的專家隊伍。如果你還沒有學習,現在就開始吧。此外對於面向對象方法論,極限編程的思想也應該有所瞭解http://www.extremeprogramming.org/。對於J2EE項目的具體實施,Rod Johnson的<<Expert One-on-One J2EE Design and Development (Programmer to Programmer)>>也很有價值,該書以作者豐富的實戰經驗向我們展示如何用儘可能簡單的解決方案構建J2EE 應用,書中作者第一次提出這樣的觀點,很多時候,J2EE應用完全沒有必要用到EJB,對於言必稱EJB的廣大J2EE開發者來說,怎麼說也有點驚世咳俗的味道。當然,作爲Servlet和JDO兩個專家組的成員,這可不是作者信口胡騶的。今天風靡Java世界的Spring框架最初便是源於此書,而IOC,AOP等概念更是被時下的java開發者掛在嘴邊。最後,作爲對Java的深入學習,Java技術的各個Specification也有必要一讀。暫時就寫到這裏吧。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章