【轉】安卓必備Java基礎

【轉】http://www.zhihu.com/question/19937886(裏面提到的知識點的連接)java

1. Java 語言基礎 
談到Java 語言基礎學習的書籍,你們確定會推薦Bruce Eckel 的《Thinking in Java》。它是一本寫的至關深入的技術書籍,Java 語言 
基礎部分基本沒有其它任何一本書能夠超越它。該書的做者Bruce Eckel 在網絡上被稱爲天才的投機者,做者的《Thinking in C++》在 
1995 年曾獲SoftwareDevelopment Jolt Award 最佳書籍大獎,《Thinking in Java》被評爲1999 年Java World「最愛讀者歡迎圖書」, 
而且贏得了編輯首選圖書獎。做者從1986 年至今,已經發表了超過150 篇計算機技術文章,出版了6 本書(其中4 本是關於C++的),並 
且在全世界作了數百次演講。他是《Thinking in Java》、《Thinking in C++》、《C++ Inside & Out》《Using C++》和《Thinking in 
Patterns》的做者,同時仍是《Black Belt C++》文集的編輯。他的書被讀者稱爲「最好的Java 參考書……絕對讓人震驚」;「購買Java 
參考書最明智的選擇」;「我見過的最棒的編程指南」。做者的非凡才華,極其跨越語言的能力,使做者被選爲Java 發展10 年間與Java 
關係最密切的10 我的物之一。 
《Thinking in Java》講述了Java 語言的方方面面,不少Java 語言的老手都評價「這是一本將Java 語言講得至關醜陋的書」。該書談 
及了java 語言的不少細節,每個方面都是至關深入的。經過本書你能夠看到「醜陋的」java 語言。 
網絡上關於java 語言講解的視頻不少不少,其中不凡是有垃圾。《翁愷—JAVA 語言》多是你學習java 語言基礎的惟一選擇,該講座基本 
按照《Thinking in Java》這本書講解,其中不凡是有翁老師的不少有意思的笑話。我很幸運學習就是今後視頻開始的。內容包括30 講, 
我總共看了3 遍。 
不過,對於初學者我不太推薦使用《Thinking in Java》,我比較推薦Prentice Hall PTR 的《Core Java 2》國內稱爲《Java 2 核心技 
術》,目前是第七版。網絡上你們均可如下載到電子版。Oreilly 的《Java in a nutshell》也是一個不錯的選擇。讀完以上兩本後,你 程序員

能夠看看翁愷老師的視頻,接着能夠研究《Thinking in Java》了。 算法

 

2. Java 數據結構 
市面上關於Java 數據結構的書自己就不多不多。大體有APress 的《Java Collections》, Jones 和Bartlett 的《Data Structures in 
Java》、《Object-oriented Data Structures Using Java》以及Prentice Hall 出版的《Data Structures and Algorithms in Java》 
(Dec 19, 2005)還有一本就是《Data Structures And Algorithms With Object-oriented Design Patterns In Java》。很幸運個人第 
一本英文書就是APress 的《Java Collections》(本書在國內可能根本就沒有中文版――只能下載英文版了),很不錯,講得頗有條例、 
很簡單,是一本完徹底全Java Collections API 介紹的書籍,其中不凡是有擴展API 的例子。這是我推薦你學習java 數據結構的惟一一 
本好書。其它的Jones 和Bartlett 的那兩本國內好像有一本中文版,想看你也能夠看看。 
在學習完API 後,你能夠看看java.util 包中對應的類了。不過只有在學習過設計模式後你纔有可能徹底理解整個Java Collections 
Framework。Java Collections Framework 使用了不少著名的設計模式如:迭代器(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 出版社的兩本,都是Elliotte Rusty Harold 的著做。兩本書的風格基本一致,推薦閱讀是第 
一版的《Jvava I/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 流與具體流的關係,多看設計模式的書籍。 
相信你會有所所獲。 sql

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

 

4 . Java 數據庫 
數據庫的書籍太多太多了,也是太爛太爛了!這方面的書我基本都研究過,推薦的你就看看Apress 的《JDBC Recipes A Problem Solution 
Approach 》很不錯,國外2005 年末纔出版,(國內好像沒有中文版,不過出了中文版也不必定值得看――國內常常將國外的書翻譯得一 
塌糊塗、不堪入目)不過咱們真的很幸運,網絡上有電子版的。值得一看。推薦我看的第一本比較滿意的――Wiley 出版的《Java Database 
Bible》,講得很不錯!Sun 公司本身的關於JDBC API 介紹的那一本《JDBC API Tutorial andRefernece》也不錯。我第二本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 的《Java Network Programming》,目前已經第三版了,之前的版本市面上確定有!網絡上早 
有第三版的電子版,國外2004 年出版,706 頁哦!講得很全,比較深刻,太深刻的可能因爲Sun 有些東西沒有徹底公開,因此也就很差 
講了,有興趣的能夠下載看看!第二本仍是O'Reilly 1998 年出版的《Java distributed 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!www.sourceforge.net 能夠下載到! 
千里之行始於足下!Just do it !(目前我也只研究了net 包,其它的會在不久的未來繼續深刻。Sun 公司由於某些緣由沒有公開net 
的其它實現細節,在其容許將其源代碼以文字的形式加以研究,以及容許將其沒有公開的實現寫入書中時,我很但願能出一本java 網絡 設計模式

編程的書籍,以飧廣大讀者!!) 瀏覽器

 

6. Servlet 和JSP 
Servlet、JSP 的書也是滿地都是!值得推薦的也僅僅兩三本。實推Addison Wiley 的《Servlets and JavaServer pages :The J2EE 
Technology Web Tier》,又是一本很厚的哦!國外2003 年出版、784 頁,講得比較全,例子也不少,特別是第八章Filter,舉了幾個不 
錯的例子。其它全部我看到的關於Servlet 和JSP 的書都沒有如此深刻的!(可能有我沒有看到而已)。O’reilly 的《Java Servlet 
Programming》和《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 年出版的《Java Thread Programming》, 寫得暴好, 
很容易讀懂,我有空還時常看當時的筆記!要知道怎麼好你本身看吧!第二本OReilly 三次出版的《Java Threads》,最新是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 不用說了吧! 
5 synchronize 是同步方法和同步塊的核心哦!多個線程調用此方法時,只有一個線程可使用此方法,其它方法阻塞,從而保證被操做 
對象內部狀態完整性。某個線程調用帶有synchronize 的方法或塊時會獲得該對象的對象鎖,完成塊中的操做後釋放此對象鎖,從而其 
它對象能夠繼續操做。 
6 wait、notify、notifyAll 提供了有效的等待/通知機制。Java 語言中每個對象都有一個休息室,任何線程在其操做的對象的狀態不 
知足的狀況下,在該對象的休息室中休息,釋放對象鎖;當其它線程操做該對象後,喚醒休息室中的線程,它們再檢查條件,當條件滿 
足後,執行相應的操做。 
多線程大體就這麼多基礎的!簡單嗎!這對於一個真正的程序員應該是不夠的,真正對多線程要有所掌握,請您研究java.util.concurrent 
包吧!大師Doug Lea 的做品,原先是一個開源的一致性編程的庫,後來被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 of Enterprise Application Architecture》,衆多大腕的 
做品,講企業消息集成的!Sun 提供的《J2EE PATTERNS SL500》也很好!晚了推薦那一本Amzon 4 星半的《Holub on patterns》, 大師 
的做品,提供了,很值得研究的例子,不過對上面四本不是很熟悉的讀者,最好不要讀它!可能會讓你比較累! 
我學習設計模式通過一段很曲折的路線,前先後後大約看了20 本,閻宏博士的《Java 與模式》我看了4 遍,還排除我第一次基本沒看 
懂的看!記得研一時老師給咱們講了GOF 的那本,做爲選修課,我和它們計算機系的碩士、博士們一塊兒,到最後一個班40-50 我的,不 
超過3 我的明白,我也沒有明白任何一點(基礎差吧――主要我對C++語言一點都不瞭解),憑我不伏輸的性格,我認爲我對java 語言理 
解還能夠,我就借了《Java 與模式》,結果仍是基本沒看懂。頗有幸的是讀研三時,聽過了上交大饒若楠老師關於Java OOP 語言的講座, 
我懂了組合書籍模式等三種設計模式後,對其它模式有了強烈的興趣和要征服它的願望!工做後我買的第一本就是《Java 與模式》,第 
一遍花了2 個月研究了這個1000 多頁的大塊頭,後來第三遍15 天左右就能夠搞定,筆記記了一大本!今後一發不可收拾。 
選對書、埋頭研究。相信很快就會入門的! 
學習Java 語言8 個簡單的部分,這只是咱們研究Java 語言的開始!這些都懂了充其量一個java 程序員而已,後面的路很長很長!咱們 
能夠繼續研究數據庫實現的源代碼、Servlet 服務器的源代碼、RMI、EJB、JNDI、面向方面編程、重構、ANT 工具、Eclipse 工具、Spring 
工具、JBoss、JOnAS、Apache Geronimo 等J2EE 服務器!研究了這些你可能會成爲一個出色的J2EE Architecture!你能夠繼續研究剖 

析器、編譯器、JNODE(java 寫的操做系統) 

 

Java 程序員的獨孤九劍 
總訣式——《Thinking in Java》 
破劍式——《Effective Java Programming Language Guide》 
破刀式——《Design patterns: Elements of Reusable Object Oriented Software》 
破槍式——《Core J2EE Patterns》 
破鞭式——《Refactoring: Improving the Design of Existing Code》 
破索式——《AntiPatterns: Refactoring Software, Architectures, and Projects in Crisis》 
破掌式——《Analysis Patterns: Reusable Object Models》 
破箭式——《Extreme Programming Explained: Embrace Change》 
破氣式——《Data Mining: Concepts and Techniques》 
獨孤九劍,有進無退!招招都是進攻,攻敵之不得不守。雖只一劍一式,倒是變化多端,學到後來,先後式融會貫通,更是威力大增, 

劍法的精要所在:「料敵機先」。

 

 

上面提到的設計模式、基礎設計原則:http://blog.csdn.net/hguisu/article/details/7571617,http://blog.csdn.net/hguisu/article/details/7571617

Android必備的Java知識點:http://blog.csdn.net/hguisu/article/details/8230427

深刻理解java異常處理機制:http://blog.csdn.net/hguisu/article/details/6155636

操做系統的:http://blog.csdn.net/hguisu/article/category/1253451

JAVA輸入輸出流:http://blog.csdn.net/hguisu/article/details/7418161

做業、進程、線程:http://blog.csdn.net/hguisu/article/details/1910803

Java線程:http://blog.csdn.net/hguisu/article/details/7490616

相關文章
相關標籤/搜索