學習Java必看書籍和步驟(轉載)

原地址:http://blog.csdn.net/yongjian1092/article/details/7372678java

Java語言基礎 
談到Java語言基礎學習的書籍,你們確定會推薦Bruce Eckel的《ThinkinginJava》。它是一本寫的至關深入的技術書籍,Java語言基礎部分基本沒有其它任何一本書能夠超越它。該書的做者BruceEckel在網絡上被稱爲天才的投機者,做者的《Thinking in C++》在1995年曾獲SoftwareDevelopmentJoltAward最佳書籍大獎,《Thinking inJava》被評爲1999年JavaWorld「最愛讀者歡迎圖書」,而且贏得了編輯首選圖書獎。做者從1986年至今,已經發表了超過150篇計算機技術文章,出版了6本書(其中4本是關於C++的),而且在全世界作了數百次演講。他是《Thinking in Java》、《Thinking inC++》、《C++ Inside& Out》《Using C++》和《Thinking inPatterns》的做者,同時仍是《BlackBeltC++》文集的編輯。他的書被讀者稱爲「最好的Java參考書……絕對讓人震驚」;「購買Java參考書最明智的選擇」;「我見過的最棒的編程指南」。做者的非凡才華,極其跨越語言的能力,使做者被選爲Java發展10年間與Java關係最密切的10我的物之一。 

《Thinking in Java》講述了Java語言的方方面面,不少Java語言的老手都評價「這是一本將Java語言講得至關醜陋的書」。該書談及了java語言的不少細節,每個方面都是至關深入的。經過本書你能夠看到「醜陋的」java語言。 

網絡上關於java語言講解的視頻不少不少,其中不凡是有垃圾。《翁愷—JAVA語言》多是你學習java語言基礎的惟一選擇,該講座基本按照《ThinkinginJava》這本書講解,其中不凡是有翁老師的不少有意思的笑話。我很幸運學習就是今後視頻開始的。內容包括30講,我總共看了3遍。 

不過,對於初學者我不太推薦使用《Thinking in Java》,我比較推薦Prentice Hall PTR 的《CoreJava2》國內稱爲《Java 2 核心技術》,目前是第七版。網絡上你們均可如下載到電子版。Oreilly的《Java inanutshell》也是一個不錯的選擇。讀完以上兩本後,你能夠看看翁愷老師的視頻,接着能夠研究《Thinking in Java》了。 



2. Java數據結構 
市面上關於Java數據結構的書自己就不多不多。大體有APress 的《Java Collections》,Jones和Bartlett的《Data Structures in Java》、《Object-oriented Data StructuresUsingJava》以及Prentice Hall 出版的《Data Structures and Algorithms in Java》(Dec19, 2005)還有一本就是《Data Structures And Algorithms WithObject-orientedDesign Patterns In Java》。很幸運個人第一本英文書就是APress的《JavaCollections》(本書在國內可能根本就沒有中文版――只能下載英文版了),很不錯,講得頗有條例、很簡單,是一本完徹底全JavaCollectionsAPI介紹的書籍,其中不凡是有擴展API的例子。這是我推薦你學習java數據結構的惟一一本好書。其它的Jones和Bartlett的那兩本國內好像有一本中文版,想看你也能夠看看。 

在學習完API後,你能夠看看java.util包中對應的類了。不過只有在學習過設計模式後你纔有可能徹底理解整個Java CollectionsFramework。JavaCollectionsFramework使用了不少著名的設計模式如:迭代器(Iterator)模式,工廠方法模式、裝飾器模式、適配器模式等等。經過研究java.util包中數據結構的源代碼,你能夠知道臭名昭著的Properties類的設計了,同時可能基本具有設計簡單的數據結構的能力了。

所謂學習無止境,學習完Sun提供了Java Collections Framework後,你能夠研究Apche的另外一個Java Collections Framework,頗有意思哦。互爲補充的兩個Framework。 



在你們學習、研究Java Collections以前,我提示一下Java Collections主要包括如下三部分:接口(Interface)、實現(Implemention)和算法(Algorithm)。 

1. 接口主要有List、Set、Queue和 Map。List 、Se t和Queue是 Collection接口的子接口。 

2.實現主要是實現這些接口的具體類。如實現List接口的ArrayList、LinkedList、Stack和Vector;實現Set接口的HashSet、TreeSet和LinkedHashSet;實現Queue接口的PriorityQueue、SynchronousQueue等等;實現Map接口的HashMap、TreeMap、Hashtable、Properties、WeakHashMap等等。 

3. 算法主要是由Arrays類和Collections類提供的,它是整個Java Collection Framework算法的核心。支持各類類型的排序,查找等經常使用操做。 

Java Collections中包含兩個版本的數據結構,主要是原先的支持同步的數據結構和後來不支持同步的數據結構。 

Java Collection Framework在使用Comparator和Comparable接口支持排序。同時提供新舊兩個版本的迭代器Iterator和Enumeraton,以及它們如何轉換等等。 

在java.util包中的Obserable接口和Observer類是考察者模式的核心。 

…… 



3. Java IO 
市面上關於IO的書籍也僅僅只有Oreilly出版社的兩本,都是ElliotteRustyHarold的著做。兩本書的風格基本一致,推薦閱讀是初版的《JvavaI/O》,講得比較淺顯,內容相對比較集中,實例也不少。第二版今年5月國外才出版,頗有幸我在網絡上下載了第二版,講得極其詳細――726頁的大塊頭(我化了兩個星期),此次將NIO和IO和在一塊兒,還包括J2ME部分的,不過串口、並口通訊部分好像類庫支持不夠,本身不能實際操做。 

與初版的《Jvava I/O》一塊兒的Oreilly還有一本《Jvava NIO》,也是很不錯的哦。 

你們在依次閱讀完《Jvava I/O》以及《Jvava NIO》後,能夠研究java.io包中的源代碼了。在你們研究源代碼前我給點提示: 

Java的io包主要包括: 

1. 兩種流:字節流(byte Stream)和字符流(character stream),這兩種流不存在所謂的誰代替誰、誰比誰高級之說,它們互爲補充,只是側重點不一樣而已。 

2. 兩種對稱:1.字節流、字符流的對稱;2.輸入、輸出的對稱。 

3. 一個橋樑:將字節流轉變爲字符流的InputStreamReader和OutputStreamWriter。 

其中必須注意: 

1. PipedInputStream和PipedOutputStrem是兩個比較有趣的類。 

2. 支持Buffered的流是咱們常用的類。 

3. 裝飾器(Decorator)模式在java最著名的應用就是用於io的設計。仔細研究各個Filter流與具體流的關係,多看設計模式的書籍。相信你會有所所獲。 

4. 學習好io包,是研究net包,rmi包……的基礎哦! 



4 . Java數據庫 
數據庫的書籍太多太多了,也是太爛太爛了!這方面的書我基本都研究過,推薦的你就看看Apress的《JDBC Recipes AProblemSolutionApproach》很不錯,國外2005年末纔出版,(國內好像沒有中文版,不過出了中文版也不必定值得看――國內常常將國外的書翻譯得一塌糊塗、不堪入目)不過咱們真的很幸運,網絡上有電子版的。值得一看。推薦我看的第一本比較滿意的――Wiley出版的《JavaDatabaseBible》,講得很不錯!Sun公司本身的關於JDBC API介紹的那一本《JDBC APITutorialandRefernece》也不錯。我第二本JDBC的就是研究的這套API。 

不過目前這些書都是一些相對比較浮淺的API應用的書籍。有機會我會給你們帶來介紹JDBC API以及JDBC實現內部細節的書!我儘快努力,同時但願獲得你們的支持! 

順便給學習JDBC的朋友一點提示: 

JDBC的學習和使用主要是這套API,其使用過程也是極其簡單,下面是使用JDBC的通常流程: 

1. 加載某個數據庫的驅動(Driver類),一般使用Class.forName(「驅動的類名「); 

2. 鏈接數據庫―― 

Connection con = DriverManager.getConnection(url,username,password); 

3. 獲得會話――Statement stmt = con.createStatement(); 

4. 執行操做――Result rs = stmt.executeQuery(「SQL查詢語句」); 

5. 處理結果―― 

while(rs.next()){ 

String col1 = rs.getString(1); 

…… 



簡單吧!整個JDBC中能夠變化的通常是: 

1. 能夠由Connection對象建立Statement、PreparedStatement和CallableStatement建立三種類型的Statement。 

2. 能夠建立多種類型的ResultSet:支持單向移動和個自由移動;可更新的和不可更新的;支持不一樣等級的交易的….. 

3. 數據輸入的批處理。 

4. 結果集中特殊類型(Blob、Clob、Arrary和Ref、Struct)列的操做。 

5. 這些特殊類型的錄入數據庫。 

6. javax.sql包中特殊結果集(CachedRowSet、JdbcRowSet、WebRowSet)的操做。 

7. 其它的就是一個DataSource了,也很簡單!一個J2EE中的被管理對象 

簡單吧!相信你們很快就會征服JDBC。 



5. Java 網絡編程 
網絡編程――一個神祕的、充滿挑戰的方向。不過在談Java網絡編程以前首先感謝Sun公司的開發人員,由於它們天才的設想,充滿智慧的架構,使廣大java程序員學習java網絡編程變得異常簡單。 

Java網絡編程方面的書,我推薦O'Reilly的《JavaNetworkProgramming》,目前已經第三版了,之前的版本市面上確定有!網絡上早有第三版的電子版,國外2004年出版,706頁哦!講得很全,比較深刻,太深刻的可能因爲Sun有些東西沒有徹底公開,因此也就很差講了,有興趣的能夠下載看看!第二本仍是O'Reilly1998年出版的《Javadistributed computing 》,基礎部分寫得比較詳細,後面的實例仍是值得研究的。 

在你們閱讀這些書以前,給你們一點提示: 

java網絡編程其實相對比較簡單,入門也很快很快。java網絡編程主要包括兩個部分:1.Socket;2.URL部分。不過第二部分也徹底創建在第一部分的基礎上。 

1. Socket包括客戶端的Socket和服務器端的ServerSocket。還有就是DatagramSocket和DatagramPacket,它對應於UDP通訊協議。 總之,Socket部分是創建其它高級協議的基礎。 

2.URL類是一個網絡資源定位器,一般和具體的網絡協議如HTTP,FTP,Telnet……相關。經過該類能夠鏈接網絡上的資源,經過其openStream能夠以io包中的流(InputStream)的形式讀取網絡資源;經過其OpenConnection方法,能夠打開一個鏈接,在此鏈接上能夠不只能夠完成讀的操做,還能夠完成寫的操做。 

Java的網絡編程大致包括以上兩部分。網絡編程和IO以及多線程部分很是密切,在學習此部分前你們必定對這兩部分了解比較透徹。 

學習了以上部分你能夠研究java.net包中的與此相關的源代碼了!研究全部的源代碼還爲時尚早。在整個net包中包含:ContentHandlerFactory、URLStreamHandlerFactory、URLStreamHandler、URLClassLoader等輔助類,它們構成了java.net網絡編程的框架,經過研究其源代碼,你不只能夠快速理解java.net包,還能夠爲之後擴展該包打下基礎,甚至能夠將此思惟方式運用到本身的項目中。 

到此爲止你對java.net包應該才瞭解60%,還有一部分你可使用JDecompiler之類的反編譯軟件打開你JDK安裝目錄下\jdkxxx\jre\lib目錄中的rt.jar,用WinRAR之類的軟件打開它的sun.net包,反編譯全部的文件,它是URL類工做的細節。當研究完該sun.net包,你就會對整個網絡編程很熟悉很熟悉了。 

一切看起來咱們已經對網絡編程很精通了。其實否則,剛剛開始而已,要想深刻,請繼續吧!網絡上不少優秀的網絡編程庫甚至軟件能夠爲咱們「添加功力」。如Apache的HttpCore和HTTPConnection是兩個和HTTP協議相關庫;JGroups是研究分佈式通訊、羣組通訊的必讀庫;接着咱們能夠研究P2P的軟件包,如Sun公司的JXTA,它多是java平臺點對點通訊將來的標準哦!接着你能夠研究成熟得不得了,使用極其普遍得P2P軟件Azureus!
千里之行始於足下!Just doit!(目前我也只研究了net包,其它的會在不久的未來繼續深刻。Sun公司由於某些緣由沒有公開net的其它實現細節,在其容許將其源代碼以文字的形式加以研究,以及容許將其沒有公開的實現寫入書中時,我很但願能出一本java網絡編程的書籍,以飧廣大讀者!!) 

6. Servlet和JSP 
Servlet、JSP的書也是滿地都是!值得推薦的也僅僅兩三本。實推Addison Wiley的《Servlets andJavaServer pages:The J2EE TechnologyWebTier》,又是一本很厚的哦!國外2003年出版、784頁,講得比較全,例子也不少,特別是第八章Filter,舉了幾個不錯的例子。其它全部我看到的關於Servlet和JSP的書都沒有如此深刻的!(可能有我沒有看到而已)。O’reilly的《JavaServletProgramming》和《Java Server Pages》相對比較好懂一些,能夠讀讀! 

在你們學習Servlet和Jsp以前我仍是要提醒一下: 

本質上說Servlet就是一個實現Servlet接口的、部署於服務器端的服務器端的程序罷了!它能夠象寫其它任何java應用程序同樣編寫,它能夠操做數據庫、能夠操做本地文件、能夠鏈接本地EJB……編寫Servlet程序的通常流程爲: 

1. 繼承一個HttpServlet類; 

2. 覆蓋其doGet、doPost方法; 

3. 在覆蓋方法的內部操做方法參數HttpServletRequest和HttpServletResponse。 

4.讀取請求利用HttpServletRequest。利用HttpServletRequest你能夠操做Http協議的協議頭、能夠獲得請求的操做方法、能夠獲得請求的路徑、能夠獲得請求的字符串、以及和請求客戶相關的信息,更主要的你能夠獲得Cookie和HttpSession這兩個對象。 

5. 利用Cookie你能夠操做「甜心」對象或者將其寫入HttpServletResponse中。 

6. 向客戶輸出信息可使用HttpServletResponse。使用HttpServletResponse能夠寫入各類類型的協議頭、能夠增長Cookie、能夠重定向其它URL、能夠向客戶發送Http協議的狀態碼。 

7. 利用HttpSession在會話內完成你想實現的任何功能。 

同時Servlet還提供了一些事件和事件**(簡單的觀察者模式而已)。還有就是過濾器(Filter)和包裝器(ServletRequestWrapper、ServletResponseWrapper)――簡單的流的使用和裝飾器模式的使用。 

學習Sevlet、JSP必然要部署到服務器中,記住一般文件部署的步驟和參數的設置以及在程序中如何使用就能夠了。 

徹底理解Servlet後,學習jsp相對比較容易了!Jsp徹底創建在Servlet的基礎上,它是爲了迎合那些喜歡在Html文檔中嵌入腳本(如:PHP之類的網頁編程語言)的程序員的須要罷了!學起來也至關的容易! 

一切看起來彷佛那麼的風平浪靜,簡單好學!簡單的表象背後有其複雜的機理。要想對Servlet和Jsp完全研究,你得研究Tomcat等開源軟件的具體實現。它無非就是一個服務器,在客戶利用網頁經過HTTP協議向服務器發送請求後,服務器將此HTTP請求轉化爲相應的HttpServletRequest對象,調用你編寫的Servlet罷了,在你的Servlet中你確定操做了此HttpServletRequest了吧,同時操做了HttpServletResponse了吧,服務器就將此HttpServletResponse按照HTTP協議的要求利用HTTP協議發送給你的瀏覽器了!在服務器端的Jsp網頁在被客戶請求後,Tomcat會利用編譯軟件,使用javax.servlet.jsp包中的模板,編譯此jsp文件,編譯後就是一個Servlet!之後的操做和Servlet徹底同樣哦! 

在Servlet和Jsp的基礎上出現了,所謂的高級技術:JSTL,Struts……無非就是一些標籤和MVC模式的使用。 

繼續前進吧!勝利就在前方!! 



7. 多線程 
一個看起來很神祕,卻很容易上手、很難精通的方向! 

我推薦兩本我感受很好的書籍。首先是我第一本能上手看的這方面的書,Sams 1998年出版的《JavaThreadProgramming》,寫得暴好,很容易讀懂,我有空還時常看當時的筆記!要知道怎麼好你本身看吧!第二本OReilly三次出版的《JavaThreads》,最新是2004版,國內好像有中文版,推薦你仍是看英文版的吧!書中談到了與多線程相關的N個方向,如IO、Swing、Collection等等。 

給你們一點提示吧!java類庫中與多線程相關的類不是不少,主要有:Thread、ThreadGroup以及ThreadLocal和InheritableThreadLocal四個類和一個Runnable接口;關鍵字synchronize、volatile;以及Object對象的wait、notify、notifyAll方法! 

1 Thread是多線程的核心類,提供了一系列建立和操做多線程的方法。 

2 ThreadGroup是一個管理Thread的工具類。 

3 ThreadLocal和InheritableThreadLocal爲Thread提供了一個相似保險箱功能的存儲線程對象的類! 

4 Runnable不用說了吧! 

5synchronize是同步方法和同步塊的核心哦!多個線程調用此方法時,只有一個線程可使用此方法,其它方法阻塞,從而保證被操做對象內部狀態完整性。某個線程調用帶有synchronize的方法或塊時會獲得該對象的對象鎖,完成塊中的操做後釋放此對象鎖,從而其它對象能夠繼續操做。 

6wait、notify、notifyAll提供了有效的等待/通知機制。Java語言中每個對象都有一個休息室,任何線程在其操做的對象的狀態不知足的狀況下,在該對象的休息室中休息,釋放對象鎖;當其它線程操做該對象後,喚醒休息室中的線程,它們再檢查條件,當條件知足後,執行相應的操做。 

多線程大體就這麼多基礎的!簡單嗎!這對於一個真正的程序員應該是不夠的,真正對多線程要有所掌握,請您研究java.util.concurrent包吧!大師DougLea的做品,原先是一個開源的一致性編程的庫,後來被Sun公司併入java類庫。做者的網站上也有另一個版本的該類庫!值得研究的好東西!Hibernation、OpenJMS等開源軟件都使用了此包! 



8. 設計模式 
談到設計模式不少人多會推薦GOF的那本,該書在Amzon上是五星級的推薦書籍。不過對於學習java沒多久的、特別是java初學者,我很不推薦這本書。主要是該書的例子基本都是C++的,不少細節沒有講述得足夠清楚。 

我給你們推薦的第一本是閻宏博士的《Java 與模式》,它是第一本中國人本身寫的關於設計模式的書籍,寫的比較有趣,融合了不少中華民族的文化和觀念,例子、類圖都比較多,且相對簡單!很是不錯的入門書籍――又是大塊頭哦! 

其次我推薦Wiley出版社出版的《Pattern In Java》一套三本,我纔看了第一本,好像第二本不怎麼樣,第三本還不錯! 

第三本是中文翻譯版的關於多線程模式的(很可貴的中文翻譯版)中國鐵道出版社2003年出版的《Java多線程設計模式》,將多線程模式講得很是淺顯,配有大量的圖例,每章都有習題,最後有答案!我研究多線程模式就是由它開始的! 

第四本,今年出版的Head First系列的《Head First Design Pattern》,秉承Head First系列圖書的優勢,大量的類圖、豐富的實例、有趣的註解,值得購買! 

其次在J2EE方向你能夠研究閱讀Addison Wesley 2002年出版的《Patterns ofEnterpriseApplication Architecture》,衆多大腕的做品,講企業消息集成的!Sun提供的《J2EEPATTERNSSL500》也很好!晚了推薦那一本Amzon 4星半的《Holubonpatterns》,大師的做品,提供了,很值得研究的例子,不過對上面四本不是很熟悉的讀者,最好不要讀它!可能會讓你比較累! 

我學習設計模式通過一段很曲折的路線,前先後後大約看了20本,閻宏博士的《Java與模式》我看了4遍,還排除我第一次基本沒看懂的看!記得研一時老師給咱們講了GOF的那本,做爲選修課,我和它們計算機系的碩士、博士們一塊兒,到最後一個班40-50我的,不超過3我的明白,我也沒有明白任何一點(基礎差吧――主要我對C++語言一點都不瞭解),憑我不伏輸的性格,我認爲我對java語言理解還能夠,我就借了《Java與模式》,結果仍是基本沒看懂。頗有幸的是讀研三時,聽過了上交大饒若楠老師關於JavaOOP語言的講座,我懂了組合書籍模式等三種設計模式後,對其它模式有了強烈的興趣和要征服它的願望!工做後我買的第一本就是《Java與模式》,第一遍花了2個月研究了這個1000多頁的大塊頭,後來第三遍15天左右就能夠搞定,筆記記了一大本!今後一發不可收拾。 

選對書、埋頭研究。相信很快就會入門的! 



學習Java語言8個簡單的部分,這只是咱們研究Java語言的開始!這些都懂了充其量一個java程序員而已,後面的路很長很長!咱們能夠繼續研究數據庫實現的源代碼、Servlet服務器的源代碼、RMI、EJB、JNDI、面向方面編程、重構、ANT工具、Eclipse工具、Spring工具、JBoss、JOnAS、ApacheGeronimo等J2EE服務器!研究了這些你可能會成爲一個出色的J2EEArchitecture!你能夠繼續研究剖析器、編譯器、JNODE(java寫的操做系統)……程序員

相關文章
相關標籤/搜索