NO IMAGE

每個人的學習方法是不同的,一個人的方法不見得適合另一個人,我只能是談自己的學習方法。因為我學習Java是完全自學的,從來沒有問過別人,所以學習的過程基本上完全是自己摸索出來的。我也不知道這種方法是否是比較好的方法,只能給大家提供一點參考了。

學習Java的第一步是安裝好JDK,寫一個HelloWorld,?其實JDK的學習沒有那麼簡單,關於JDK有兩個問題是很容易一直困擾Java程式設計師的地方:一個是CLASSPATH的問題,其實從原理上來說,是要搞清楚JRE的ClassLoader是如何載入Class的;另一個問題是package和import問題,如何來尋找類的路徑問題。把這兩個問題摸索清楚了,就掃除了學習Java和使用JDK的最大障礙。推薦看一下王森的《Java深度歷險》,對這兩個問題進行了深入的探討。

第二步是學習Java的語法。Java的語法是類C 的,基本上主流的程式語言不是類C,就是類C 的,沒有什麼新東西,所以語法的學習,大概就是半天的時間足夠了。唯一需要注意的是有幾個不容易搞清楚的關鍵字的用法,public,protected,private,static,什麼時候用,為什麼要用,怎麼用,這可能需要有人來指點一下,我當初是完全自己琢磨出來的,花了很久的時間。不過後來我看到《ThinkinginJava》這本書上面是講了這些概念的。

第三步是學習Java的物件導向的程式語言的特性的地方。比如繼承,構造器,抽象類,介面,方法的多型,過載,覆蓋,Java的異常處理機制。對於一個沒有面嚮物件語言背景的人來說,我覺得這個過程需要花很長很長時間,因為學習Java之前沒有C 的經驗,只有C的經驗,我是大概花了一個月左右吧,才徹底把這些概念都搞清楚,把書上面的例子反覆的揣摩,修改,嘗試,把那幾章內容反覆的看過來,看過去,看了不下5遍,才徹底領悟了。不過我想如果有C 經驗的話,應該一兩天時間足夠了。那麼在這個過程中,可以多看看《ThinkinginJava》這本書,對物件導向的講解非常透徹。可惜的是我學習的時候,並沒有看到這本書,所以自己花了大量的時間,通過自己的嘗試和揣摩來學會的。

第四步就是開始熟悉Java的類庫。Java的基礎類庫其實就是JDK安裝目錄下面jrelib t.jar這個包。學習基礎類庫就是學習rt.jar。基礎類庫裡面的類非常非常多。據說有3000多個,我沒有統計過。但是真正對於我們來說最核心的只有4個,分別是

java.lang.*;

java.io.*;

java.util.*;

java.sql.*;

這四個包的學習,每個包的學習都可以寫成一本厚厚的教材,而O”reilly也確實是這樣做的。我覺得如果時間比較緊,是不可能通過讀四本書來學習。我覺得比較好的學習方法是這樣的:

先要通讀整個package的框架,瞭解整個package的class,interface,exception的構成,最好是能夠找到介紹整個包框架的文章。這些專門介紹包的書籍的前幾章應該就是這些總體的框架內容介紹。

對包整體框架的把握並不是要熟悉每個類的用法,記住它有哪些屬性,方法。想記也記不住的。而是要知道包有哪些方面的類構成的,這些類的用途是什麼,最核心的幾個類分別是完成什麼功能的。我在給人培訓的時候一般是一次課講一個包,所以不可能詳細的介紹每個類的用法,但是我反覆強調,我給你們講這些包的不是要告訴你們類的方法是怎麼呼叫的,也不要求你們記住類的方法呼叫,而是要你們瞭解,Java給我們提供了哪些類,每個類是用在什麼場合,當我遇到問題的時候,我知道哪個類,或者哪幾個類的組合可以解決我的問題,That”all!,當我們具體寫程式的時候,只要你知道該用哪個類來完成你的工作就足夠了。編碼的時候,具體的方法呼叫,是邊寫程式碼,邊查Documentation,所有的東西都在Documentation裡面,不要求你一定記住,實際你也記不住3000多個類的總共將近10萬個方法呼叫。所以對每個包的總體框架的把握就變得極為重要。

第五步,通過上面的學習,如果學的比較紮實的話,就打好了Java的基礎了,剩下要做的工作是掃清Documentation裡面除了上面4個包之外的其他一些比較有用處的類。相信進展到這一步,Java的自學能力已經被培養出來了,可以到了直接學習Documentation的水平了。除了要做GUI程式設計之外,JDK裡面其他會有用處的包是這些:

java.text.

這些包裡面真正用的比較多的類其實很少,只有幾個,所以不需要花很多時間。

第六步,JavaWeb程式設計,Web程式設計的核心是HTTP協議,HTTP協議和Java無關,如果不熟悉HTTP協議的話,雖然也可以學好Servlet/JSP程式設計,但是達不到舉一反三,一通百通的境界。所以HTTP協議的學習是必備的。如果熟悉了HTTP協議的話,又有了Java程式設計的良好的基礎,學習Servlet/JSP簡直易如反掌,我學習Servlet/JSP就用了不到一週的時間,然後就開始用JSP來做專案了。

在Servlet/JSP的學習中,重頭仍然是ServletDocumentation。ServletAPI最常用的類很少,花比較少的時間就可以掌握了。把這些類都看一遍,多寫幾個例子試試。Servlet/JSP程式設計本質就是在反覆呼叫這些類來通過HTTP協議在WebServer和Brower之間交談。另外對JSP,還需要熟悉幾個常用JSP的標記,具體的寫法記不住的話,臨時查就是了。

此外JavaWeb程式設計學習的重點要放在WebApplication的設計模式上,如何進行業務邏輯的分析,並且進行合理的設計,按照MVC設計模式的要求,運用Servlet和JSP

分別完成不同的邏輯層,掌握如何在Servlet和JSP之間進行流程的控制和資料的共享,以及WebApplication應該如何配置和部署。

第七步,J2EE程式設計

以上的學習過程如果是比較順利的話,進行到這一步,難度又陡然提高。因為上面的知識內容都是隻涉及一個方面,而像EJB,JMS,JTA等核心的J2EE規範往往是幾種Java技術的綜合運用的結晶,所以掌握起來難度比較大。

首先一定要學習好JNDI,JNDI是AppServer定位伺服器資源(EJB元件,Datasouce,JMS)查詢方法,如果對JNDI不熟悉的話,EJB,JMS這些東西幾乎學不下去。JNDI其實就是javax.naming.*這個包,運用起來很簡單。難點在於伺服器資原始檔的配置。對於伺服器資原始檔的配置,就需要看看專門的文件規範了,比如web.xml的寫法,ejb-jar.xml的寫法等等。針對每種不同的AppServer,還有自己的服務資源配置檔案,也是需要熟悉的。

然後可以學習JTA,主要是要理解JTA對於事務的控制的方法,以及該在什麼場合使用JTA。這裡可以簡單的舉個例子,我們知道一般情況可以對於一個資料庫連線進行事務控制(conn.setAutoCommit(false),….,conn.commit()),做為一個原子操作,但是假設我的業務需求是要把對兩個不同資料庫的操作做為一個原子操作,你能做的到嗎?這時候只能用JTA了。假設操作過程是先往A資料庫插一條記錄,然後刪除B資料庫另一個記錄,我們自己寫程式碼是控制不了把整個操作做為一個原子操作的。用JTA的話,由AppServer來完成控制。

在學習EJB之前要學習物件序列化和RMI,RMI是EJB的基礎。接著學習JMS和EJB,對於EJB來說,最關鍵是要理解EJB是如何通過RMI來實現對遠端物件的呼叫的,以及在什麼情況下要用到EJB。

在學習完EJB,JMS這些東西之後,你可能會意識到要急不可待學習兩個領域的知識,一個是UML,另一個是DesignPattern。Java企業軟體的設計非常重視框架(Framework)的設計,一個好的軟體框架是軟體開發成功的必要條件。在這個時候,應該開始把學習的重點放在設計模式和框架的學習上,通過學習和實際的程式設計經驗來掌握EJB的設計模式和J2EE的核心模式。

J2EE規範裡面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外還有很多很多的企業技術,這裡不一一進行介紹了。

另外還有一個最新領域WebServices。WebServices也完全沒有任何新東西,它像是一種黏合劑,可以把不同的服務統一起來提供一個統一的呼叫介面,作為使用者來說,我只要獲得服務提供者給我的WSDL(對服務的描述),就夠了,我完全不知道伺服器提供者提供的服務究竟是EJB元件,還是.Net元件,還是什麼CORBA元件,還是其他的什麼實現,我也不需要知道。WebServices

最偉大的地方就在於通過統一的服務提供方式和呼叫方式,實現了整個Internet服務的共享,是一個非常令人激動的技術領域。WebServices好像目前還沒有什麼很好的書籍,但是可以通過在網路上面查資料的方式來學習。

首先java完全可以在半年之內學通,只要你確實用心學,這點完全不必擔心。

如果你智商屬於普通人並且完全沒有程式設計的基礎,例如c,c ,或者其他程式語言(我指的是親手編寫一個完整的程式,helloworld或者剪下字串不算)我強烈不推薦你看書,不然將浪費你大量的入門時間,甚至走許多彎路(比如做j2ee的話swing與swt是基本不用會的,多執行緒也只要會點基礎即可),現在java的視訊教程滿天飛,完全可以選一個講解清晰,條理明確的java入門視訊,這裡我推薦馬士兵的j2se視訊教程,以前我看的也是這個,雖然現在看來裡面有點小錯,但不失為一個看起來愉快,學起來輕鬆的入門級教程,畢竟剛開始的時候還是應該以培養興趣為主,。

入了門之後就要選方向j2me或j2ee,這兩種你可以自己上百度搜下,其實都是滿有前途的,以後牛了雙修也未嘗不可。

我個人學的是j2ee的內容,j2ee說白了就是做網頁,這時候你要從先從java裡脫身出來,學些跟網頁有關的東西:

1.html:很簡單的東西不是太笨的話半天左右即可搞定

2.js:易學難精,想速度找工作不必花太多時間,隨便買本javascript書略讀並備查 推薦:JavaScript高階程式設計;JavaScript權威指南

3.資料庫:如果沒有基礎的話,建議多花時間,至少一個月,開始建議用mysql,然後是oracle,然後是sqlserver,這段時間最關鍵的就是sql語言的編寫,關係到你今後筆試的成敗,一定要自己多練,多在網上找筆試題做。

5.xml 就是一種封裝資料的格式,沒啥好學的,練習一下怎麼用dom4j或者jdom讀寫xml即可,可以直接去網上下有註釋的例子程式來看看,比看視訊看書快多了。

6.jsp,servlet,tomcat: 這段時間說白了就是用jsp來做個網站,學習方法也很多種,可以看書比如java web 開發詳解,我一同學就是看這本書看會的。

也可以繼續看視訊比如尚學堂的jsp,servlet。

7.學再多不實踐也是不行的,這時候可以自己搞個小專案了,可以參考尚學堂shopping視訊,bbs視訊,不過這兩個專案練練手可以,別往簡歷上寫,太丟臉了。這其中還有很多小工具,例如jxl的excel讀寫,jfreechat的圖表生成等等,實在不行進公司再學也行,因為不一定每家公司都用這些東西。

8.開始進入框架時代,框架說白了就是加速開發的工具,內在原理還是以上的那些東西

主要是3大框架:

mvc框架:struts,struts2,jsf

or對映框架:hibernate,ibatis

業務框架:spring

重量級框架:ejb

每種挑一樣學即可,因為大概都差不多,學了一種同類產品可以在3天內搞定

學習方法分兩類

1.看視訊:時間長,要有耐性,估計全看完要1個半月,基本可以學全開發用的東西,但是對內在原理了解不深。

2.看網上資料,看書:速度因人而已,領悟力強的半個月就能搞定,學的東西還比看視訊多,畢竟學到這階段都有點基礎了,可以研究下程度更深的東西,如果自覺不夠聰明就別勉強了,說不定3個月還雲裡霧裡。

當年我基本是2種結合,一邊利用上無聊課的時間看書,大學這種課應該還不算少,視訊如果覺得會了就拉過去。

視訊主要是2家,尚學堂的夠全面,但不夠深入,學起來比較簡單。

傳知播客夠深入,也全面,但是學起來比較難。

9.最後一個,在我面試的經歷中幾乎必問的東西,AJAX

首先是搞清楚原理,最基礎的那段js呼叫伺服器的程式碼必背,

然後是學一個ajax框架,推薦jquery學起來簡單,ext備選,用的人多。

10.webservice,ant,gis等等等等。

這些東西筆試面試最多問你做沒做過,基本不影響你進公司,以後有機會就在專案中學。

11.面試之前自己做一個拿的出手的專案,不需要太大,4,5張表即可,但一定要夠花哨,ssh框架全用上,ajax必用,報表功能必有,面試的時候就拿這專案猛吹,然後原始碼丟給他,基本就沒啥問題了(美工直接上網抄,或者上網找個現成的專案扒光後臺全部自己寫)。

最後,送你一句話,男兒當自強。

在程式設計師這行裡,能力遠遠大於學歷,你相信你能成功,你就能成功!

java思維買免費學習資料公開課直播交流群:175161984(←長按可複製)獲取學習資料可