本文是我的另外一篇文章如何才算掌握Java(J2SE篇) (後面簡稱標准篇)的姊妹篇,提出了標准,但是不告訴新手如何才能達到那個標准似乎說不過去。首先需要說的是達到這個標准是比較困難的,沒有三年的時間一般是不可能的,沒有實際的項目的經驗的熏陶也是不可能的,下文會說明為什麼。然後給出兩個寶典:一個就是TIJ(Thinking in Java),另外一個就是chm格式的JDK的API。 TIJ可以看看Java編程思想(完整的中文簡體第二版),如果英文可以的話強烈要求看英文原版,而chm格式的JDK的API的下載地址可以看看Cherami站長的推薦。雖然我沒有把TIJ看完(我開始用Java做項目的時候TIJ還沒有出來),但是我浏覽過目錄和看過一些章節的內容,感覺作者對Java非常的熟悉,實際經驗也非常的豐富,很多內容一看就是經驗之談。需要說明的是,我說的看包括內容和領會作者的意思,如果用Java做過一些項目以後你再回頭看看TIJ你會發現如果你剛開始就記得並掌握了TIJ所講的內容後會對的項目有多大的幫助。掌握TIJ的內容至少可以達到標准篇中所講的語法、思想以及規范的標准,對於API的掌握也有很大的助益。之所以需要chm格式的JDK的API是因為JDK的API實在是很大,個人認為不大可能記得那麼多,而站長推薦的那個API可以非常方便的根據類名或者方法名查到對應的說明,有時候我們就是大致記得應該用哪個類或者某個方法,但是忘記了具體的細節,這個時候就可以查那個東東了,我現在已經養成先把那個chm打開再開始做事情的習慣了。需要提醒的是你不能完全依賴它,有些東西還是需要自己記的,如果你都不知道要用什麼你怎麼去查呢?你至少要記得一個索引,哪個類或者方法可以完成什麼樣的功能的索引。接下來就是實際項目的熏陶了。如果你不做applet,你就不會去用appletvIEwer和HtmlConverter,如果你不打包你就不會用jar,如果你不做類庫你可能就不會用javadoc,如果你對系統的運行性能不關心你可能根本不會考慮使用javap,如果你不做獨立運行的程序你可能根本就不會注意到我們有時候是多麼的討厭那個多於的DOS窗口而用javaw代替java來運行你的程序,如果你沒有做過國際化,你怎麼可能去使用native2ascii進行轉換編碼呢,如果你沒有做序列化並且升級你的類你是不會知道你為什麼需要serialver的。而離開了這些命令或者說工具,你可能不知道Java到底都能做哪些內容。這些命令都是基於命令行的,對於習慣的圖形界面的新時代來說可能會很不習慣,但是你必須知道在命令行下如何使用他們,因為很可能你真正項目中需要運行的環境就是一個命令行(UNIX/Linux服務器)。在開發一個實際的系統的時候,你不可能使用editplus或者notepad或者vi或者emcs寫代碼,因此你必須有一個你熟悉的IDE工具,這樣你才能管理龐大的工程,而這些IDE工具不可能僅僅用來做編輯器,你可能更需要的是使用他們的調試功能追蹤疑難雜症(如何設置各種斷點,特別是在循環裡面設置條件斷點),另外就是他們的代碼提示功能以及集成的版本控制功能。實際項目對API的掌握也是一個莫大的考驗,真正的項目的工期都會比較緊湊,因此要完成什麼功能需要使用什麼那些類以及如何完成都是對你對API掌握情況的真正考驗。如果你沒有做過需求頻繁變更的項目,那你很幸運,但是實際情況往往不是這樣。你修改代碼以後以為沒有問題了,你往往只是測試了你眼前的部分,但是其他的部分怎麼辦?難道都要我測試一下,天哪!是的,情況往往就是這樣的,因為需求變更導致的回歸錯誤可能是我們最大的噩夢!如果你的代碼結構良好,那麼你可以使用JUnit編寫單元測試用例來保證你的修改對各個部分的接口沒有造成不良的影響。一個符合OO的系統應該也是一個易於測試或者易於編寫單元測試用例的系統!如果你沒有完整的參與過一個項目,你不會知道拷貝文件、發布版本、打包、生成javadoc、運行測試用例、版本維護、建立裡程碑、建立基准版本、增量更新版本是多麼痛苦的事情,但是如果你使用Ant編寫一個腳本幫你完成這些項目必須而又瑣碎的事情,你會覺得其實開發項目有時候也是很輕松的。一旦你經歷了這些項目的真正的磨難的時候,你看到錯誤信息的時候就不會手忙腳亂了,你可以很清楚的知道是哪個地方出問題了,可能的原因以及解決方法是什麼。沒有遇到問題,你就不會學會解決問題,你也就不可能提高! 最後總結一下:掌握TIJ,你對Java的語法、API、思想和規范會有一個比較好的基礎,而通過實際項目的鍛煉,你對API會更熟悉、你也會掌握那些基本的命令在命令行下怎麼用,怎麼選用一個IDE以及最重要的:如何排錯、調試程序、測試程序以及使用工具讓電腦完成那些瑣碎的例行工作。 以上只是個人的一點看法,希望對於那些迫切的想掌握Java的新手有所啟迪和幫助。不滿意的人可以丟西紅柿,不要丟臭雞蛋了。^_^