Java是一個通用的編程語言,其實(shí)可以干很多事,怎么學(xué)Java就看怎么用了,但有一些一般的步驟:
熟悉一種文本編輯器,比如Vim,Emacs,Notepad++,TextMate等。知道哪些是開源的,哪些是閉源的,哪些要收費(fèi)。養(yǎng)成不用盜版軟件的習(xí)慣。
安裝JDK(建議用你的Linux發(fā)行版自帶的軟件包管理器安裝openjdk,過程中可能需要讀發(fā)行版特定的文檔)
寫一個Java的Helloworld程序,并用命令行工具javac編譯,再用java命令運(yùn)行這個程序。過程中熟悉源代碼、字節(jié)碼、虛擬機(jī)這些東西,以及Java的包(package)對.class文件所在的路徑的影響。如果這兩個命令行工具使用熟練了,可以開始選一個喜歡的集成開發(fā)環(huán)境,比如Eclipse。當(dāng)然,養(yǎng)成不用盜版軟件的習(xí)慣。熟悉一下如何建立“工程”,以及快捷鍵的使用。
學(xué)習(xí)Java的面向過程編程,包括基本數(shù)據(jù)結(jié)構(gòu)、表達(dá)式、語句、控制流、函數(shù)調(diào)用。
學(xué)習(xí)Java的面向?qū)ο缶幊蹋悺⒁妙愋秃椭殿愋偷膮^(qū)別、成員、方法、訪問控制、繼承、多態(tài)、接口、接口實(shí)現(xiàn)。順便學(xué)習(xí)一下面向?qū)ο蟮幕舅枷耄磳ο?、消息、封裝、繼承、多態(tài)等,這些通用的內(nèi)容不是Java特有的。這時候應(yīng)該已經(jīng)涉及了Java的垃圾回收。要留意即使有垃圾回收的情況下也會發(fā)生的內(nèi)存泄露(如自己設(shè)計數(shù)組容器,元素是引用,邏輯上刪除了元素,但并沒有清成null)。注意垃圾回收只能回收內(nèi)存中的對象,除了內(nèi)存以外,其它資源不能依靠垃圾回收來關(guān)閉。比如,文件、管道、Socket、數(shù)據(jù)庫連接等,垃圾回收是不會幫你關(guān)閉的。
學(xué)習(xí)Java的異常處理,但更重要的是學(xué)習(xí)什么時候用特殊返回值而不使用異常,什么時候應(yīng)該拋出異常而不處理異常,知道什么是pokemon catch及其危害,了解為什么Java的checkedexception是一個糟糕的特性。如果愿意,同時學(xué)習(xí)一下Java1.7的try-with-resource語句和AutoCloseable接口。
熟悉Java常用的數(shù)據(jù)結(jié)構(gòu),如基本的數(shù)組類型,以及泛型容器(java.util.*),尤其是java.util.List接口和java.util.ArrayList實(shí)現(xiàn);以及java.util.Map接口和java.util.HashMap實(shí)現(xiàn)。(java1.5以前的沒有泛型參數(shù)的就不用碰了)同時留意一下基本類型int,double等和裝箱類型Integer和Double的區(qū)別,以及它們是如何自動轉(zhuǎn)換的。
熟悉Java標(biāo)準(zhǔn)庫里的各種工具,包括日期時間、字符串格式化、IO等。**知道文件要自己在finally子句中close(),或者用Java1.7的try-with-resource,不要妄想垃圾回收器會幫你關(guān)掉文件。
學(xué)習(xí)一下Java的命名習(xí)慣,以及JavaBeans的常規(guī),知道為什么getter/setter比直接操作成員變量好。按這種方式給Java的變量、方法命名。同時看看你的IDE能不能自動幫你生成getter和setter。
使用一個第三方的庫(比如Apache CommonsLang通用工具庫),讓你的程序依賴于它的二進(jìn)制jar包(而不是直接拷貝源代碼),用命令行編譯、運(yùn)行(注意classpath等);也熟悉一下如何用你的集成開發(fā)環(huán)境添加第三方依賴。感受一下手動管理依賴關(guān)系的麻煩。
學(xué)習(xí)Maven的使用,試著讓Maven幫你解決依賴關(guān)系,再試著讓Maven幫你創(chuàng)建一個Eclipse工程。再試試用Maven打包發(fā)布。
學(xué)習(xí)軟件測試,以及JUnit的使用,以及怎么在IDE中使用JUnit。有空看一下coverage工具。
讀讀四人幫寫的《設(shè)計模式》(這本書是用C++和Smalltalk語言為例子的,但仍然適合Java)。