第一篇:java學(xué)習(xí)(基于Java阻塞隊(duì)列的搜索實(shí)例)
基于Java阻塞隊(duì)列的搜索實(shí)例 隊(duì)列以一種先進(jìn)先出的方式管理數(shù)據(jù),如果你試圖向一個(gè)已經(jīng)滿了的阻塞隊(duì)列中添加一個(gè)元素,或是從一個(gè)空的阻塞隊(duì)列中移除一個(gè)元素,將導(dǎo)致線程阻塞。在多線程進(jìn)行合作時(shí),阻塞隊(duì)列是很有用的工具,工作者線程可以定期的把中間結(jié)果存到阻塞隊(duì)列中,而其他工作者線程把中間結(jié)果取出并在將來修改它們。
隊(duì)列以一種先進(jìn)先出的方式管理數(shù)據(jù)。如果你試圖向一個(gè)已經(jīng)滿了的阻塞隊(duì)列中添加一個(gè)元素,或是從一個(gè)空的阻塞隊(duì)列中移除一個(gè)元素,將導(dǎo)致線程阻塞。在多線程進(jìn)行合作時(shí),阻塞隊(duì)列是很有用的工具。工作者線程可以定期的把中間結(jié)果存到阻塞隊(duì)列中。而其他工作者線程把中間結(jié)果取出并在將來修改它們。隊(duì)列會(huì)自動(dòng)平衡負(fù)載。如果第一個(gè)線程集運(yùn)行的比第二個(gè)慢,則第二個(gè)線程集在等待結(jié)果時(shí)就會(huì)阻塞。如果第一個(gè)線程集運(yùn)行的快,那么它將等待第二個(gè)線程集趕上來。
下面的程序展示了如何使用阻塞隊(duì)列來控制線程集。程序在一個(gè)目錄及它的所有子目錄下搜索所有文件,打印出包含指定關(guān)鍵字的文件列表。
java.util.concurrent包提供了阻塞隊(duì)列的4個(gè)變種:LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue和DelayQueue。我們用的是ArrayBlockingQueue。ArrayBlockingQueue在構(gòu)造時(shí)需要給定容量,并可以選擇是否需要公平性。如果公平參數(shù)被設(shè)置了,等待時(shí)間最長(zhǎng)的線程會(huì)優(yōu)先得到處理。通常,公平性會(huì)使你在性能上付出代價(jià),只有在的確非常需要的時(shí)候再使用它。
生產(chǎn)者線程枚舉在所有子目錄下的所有文件并把它們放到一個(gè)阻塞隊(duì)列中。這個(gè)操作很快,如果隊(duì)列沒有設(shè)上限的話,很快它就包含了沒有找到的文件。
我們同時(shí)還啟動(dòng)了大量的搜索線程。每個(gè)搜索線程從隊(duì)列中取出一個(gè)文件,打開它,打印出包含關(guān)鍵字的所有行,然后取出下一個(gè)文件。我們使用了一個(gè)小技巧來在工作結(jié)束后終止線程。為了發(fā)出完成信號(hào),枚舉線程把一個(gè)虛擬對(duì)象放入隊(duì)列。(這類似于在行李輸送帶上放一個(gè)寫著“最后一個(gè)包”的虛擬包。)當(dāng)搜索線程取到這個(gè)虛擬對(duì)象時(shí),就將其放回并終止。
注意,這里不需要人任何顯示的線程同步。在這個(gè)程序中,我們使用隊(duì)列數(shù)據(jù)結(jié)構(gòu)作為一種同步機(jī)制。
1.import java.io.*;
2.import java.util.*;
3.import java.util.concurrent.*;
4.5.public class BlockingQueueTest
6.{
7.public static void main(String[] args)
8.{
9.Scanner in = new Scanner(System.in);
10.System.out.print(“Enter base directory(e.g./usr/local/jdk1.6.0
/src): ”);
11.String directory = in.nextLine();
12.System.out.print(“Enter keyword(e.g.volatile): ”);
13.String keyword = in.nextLine();
14.15.final int FILE_QUEUE_SIZE = 10;
16.final int SEARCH_THREADS = 100;
17.18.BlockingQueue
EUE_SIZE);
19.20.FileEnumerationTask enumerator = new FileEnumerationTask(queue,new File(directory));
21.new Thread(enumerator).start();
22.for(int i = 1;i <= SEARCH_THREADS;i++)
23.new Thread(new SearchTask(queue, keyword)).start();
24.}
25.}
26.27./**
28.* This task enumerates all files in a directory and its subdirectorie
s.29.*/
30.class FileEnumerationTask implements Runnable
31.{
32./**
33.* Constructs a FileEnumerationTask.34.* @param queue the blocking queue to which the enumerated files ar
e added
35.* @param startingDirectory the directory in which to start the enu
meration
36.*/
37.public FileEnumerationTask(BlockingQueue
Directory)
38.{
39.this.queue = queue;
40.this.startingDirectory = startingDirectory;
41.}
42.43.public void run()
44.{
45.try
46.{
47.enumerate(startingDirectory);
48.queue.put(DUMMY);
49.}
50.catch(InterruptedException e)
51.{
52.}
53.}
54.55./**
56.* Recursively enumerates all files in a given directory and its su
bdirectories
57.* @param directory the directory in which to start
58.*/
59.public void enumerate(File directory)throws InterruptedException
60.{
61.File[] files = directory.listFiles();
62.for(File file : files)
63.{
64.if(file.isDirectory())enumerate(file);
65.else queue.put(file);
66.}
67.}
68.69.public static File DUMMY = new File(“");
70.71.private BlockingQueue
72.private File startingDirectory;
73.}
74.75./**
76.* This task searches files for a given keyword.77.*/
78.class SearchTask implements Runnable
79.{
80./**
81.* Constructs a SearchTask.82.* @param queue the queue from which to take files
83.* @param keyword the keyword to look for
84.*/
85.public SearchTask(BlockingQueue
86.{
87.this.queue = queue;
88.this.keyword = keyword;
89.}
90.91.public void run()
92.{
93.try
94.{
95.boolean done = false;
96.while(!done)
97.{
98.File file = queue.take();
99.if(file == FileEnumerationTask.DUMMY)
100.{
101.queue.put(file);
102.done = true;
103.}
104.else search(file);
105.}
106.}
107.catch(IOException e)
108.{
109.e.printStackTrace();
110.}
111.catch(InterruptedException e)
112.{
113.}
114.}
115.116./**
117.* Searches a file for a given keyword and prints all matching li
nes.118.* @param file the file to search
119.*/
120.public void search(File file)throws IOException
121.{
122.Scanner in = new Scanner(new FileInputStream(file));123.int lineNumber = 0;
124.while(in.hasNextLine())
125.{
126.lineNumber++;
127.String line = in.nextLine().trim();
128.if(line.contains(keyword))System.out.printf(”%s:%d%s%
n", file.getPath(), lineNumber, line);
129.}
130.in.close();
131.}
132.133.private BlockingQueue
135.}
原文鏈接:中軟卓越http:http://
第二篇:java學(xué)習(xí)
.如何學(xué)習(xí)Java?
3.1 Java學(xué)習(xí)路線
3.1.1 基礎(chǔ)語法及Java原理基礎(chǔ)語法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當(dāng)危險(xiǎn)的。學(xué)習(xí)Java也是如此,必須要有扎實(shí)的基礎(chǔ),你才能在J2EE、J2ME領(lǐng)域游刃有余。參加SCJP(SUN公司認(rèn)證的Java程序員)考試不失為一個(gè)好方法,原因之一是為了對(duì)得起你交的1200大洋考試費(fèi),你會(huì)更努力學(xué)習(xí),原因之二是SCJP考試能夠讓你把基礎(chǔ)打得很牢靠,它要求你跟JDK一樣熟悉Java基礎(chǔ)知識(shí);但是你千萬不要認(rèn)為考過了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險(xiǎn)的。獲得“真正”的SCJP只能證明你的基礎(chǔ)還過得去,但離實(shí)際開發(fā)還有很長(zhǎng)的一段路要走。
3.1.2 OO思想的領(lǐng)悟掌握了基礎(chǔ)語法和Java程序運(yùn)行原理后,我們就可以用Java語言實(shí)現(xiàn)面向?qū)ο蟮乃枷肓恕C嫦驅(qū)ο?,是一種方法學(xué);是獨(dú)立于語言之外的編程思想;是 CBD基于組件開發(fā)的基礎(chǔ);屬于強(qiáng)勢(shì)技術(shù)之一。當(dāng)以后因工作需要轉(zhuǎn)到別的面向?qū)ο笳Z言的時(shí)候,你會(huì)感到特別的熟悉親切,學(xué)起來像喝涼水這么簡(jiǎn)單。
使用面向?qū)ο蟮乃枷脒M(jìn)行開發(fā)的基本過程是: ●調(diào)查收集需求。●建立用例模型。
●從用例模型中識(shí)別分析類及類與類之間的靜態(tài)動(dòng)態(tài)關(guān)系,從而建立分析模型?!窦?xì)化分析模型到設(shè)計(jì)模型?!裼镁唧w的技術(shù)去實(shí)現(xiàn)?!駵y(cè)試、部署、總結(jié)。
3.1.3 基本API的學(xué)習(xí)進(jìn)行軟件開發(fā)的時(shí)候,并不是什么功能都需要我們?nèi)?shí)現(xiàn),也就是經(jīng)典名言所說的“不需要重新發(fā)明輪子”。我們可以利用現(xiàn)成的類、組件、框架來搭建我們的應(yīng)用,如SUN公司編寫好了眾多類實(shí)現(xiàn)一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調(diào)用類中的方法來完成某些功能或繼承它。那么這些類中究竟提供了哪些方法給我們使用?方法的參數(shù)個(gè)數(shù)及類型是?類的構(gòu)造器需不需要參數(shù)?總不可能SUN公司的工程師打國(guó)際長(zhǎng)途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,Java DOC文檔(參考文獻(xiàn)4.4)就是這樣的文檔,它可以說是程序員與程序員交流的文檔?;続PI指的是實(shí)現(xiàn)了一些底層功能的類,通用性較強(qiáng)的API,如字符串處理/輸入輸出等等。我們又把它成為類庫(kù)。熟悉API的方法一是多查Java DOC文檔(參考文獻(xiàn)4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。
3.1.4 特定API的學(xué)習(xí)Java介入的領(lǐng)域很廣泛,不同的領(lǐng)域有不同的API,沒有人熟悉所有的API,對(duì)一般人而言只是熟悉工作中要用到的API。如果你做界面開發(fā),那么你需要學(xué)習(xí)Swing/AWT/SWT等API;如果你進(jìn)行網(wǎng)絡(luò)游戲開發(fā),你需要深入了解網(wǎng)絡(luò)API/多媒體API/2D3D等;如果你做WEB開發(fā),就需要熟 悉Servlet等API啦??傊?,需要根據(jù)工作的需要或你的興趣發(fā)展方向去選擇學(xué)習(xí)特定的API。
3.1.5 開發(fā)工具的用法在學(xué)習(xí)基礎(chǔ)語法與基本的面向?qū)ο蟾拍顣r(shí),從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時(shí)候不要急于上手JBuilder/Eclipse等集成開發(fā)環(huán)境,以免過于關(guān)注IDE的強(qiáng)大功能而分散對(duì)Java技術(shù)本身的注意力。過了這一階段你就可以開始熟悉 IDE了。程序員日常工作包括很多活動(dòng),編輯、編譯及構(gòu)建、調(diào)試、單元測(cè)試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項(xiàng)活動(dòng)都有專門的工具,如果獨(dú)立使用這些工具的話,你將會(huì)很痛苦,你需要在堆滿工具的任務(wù)欄上不斷的切換,效率很低下,也很容易出錯(cuò)。在JBuilder、Eclipse等IDE中已經(jīng)自動(dòng)集成編輯器、編譯器、調(diào)試器、單元測(cè)試工具JUnit、自動(dòng)構(gòu)建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進(jìn)去,又提供了豐富的向?qū)椭煽蚣艽a,讓我們的開發(fā)變得更輕松。應(yīng)該說IDE發(fā)展的趨勢(shì)就是集成軟件開發(fā)中要用到的幾乎所有工具。從開發(fā)效率的角度考慮,使用IDE是必經(jīng)之路,也是從一個(gè)學(xué)生到一個(gè)職業(yè)程序員轉(zhuǎn)變的里程碑。Java開發(fā)使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder 占有的市場(chǎng)份額是最大的。JBuilder在近幾年來一直是Java集成開發(fā)環(huán)境中的霸主,它是由備受程序員尊敬的Borland公司開發(fā),在硝煙彌漫的 Java IDE大戰(zhàn)中,以其快速的版本更新?lián)魯BM的Visual Age for Java等而成就一番偉業(yè)。IBM在Visual Age for Java上已經(jīng)無利可圖之下,干脆將之貢獻(xiàn)給開源社區(qū),成為Eclipse的前身,真所謂“柳暗花明又一村”。浴火重生的Eclipse以其開放式的插件擴(kuò)展機(jī)制、免費(fèi)開源獲得廣大程序員(包括幾乎所有的骨灰級(jí)程序員)的青睞,極具發(fā)展?jié)摿Α?/p>
3.1.6 學(xué)習(xí)軟件工程 對(duì)小型項(xiàng)目而言,你可能認(rèn)為軟件工程沒太大的必要。隨著項(xiàng)目的復(fù)雜性越來越高,軟件工程的必要性才會(huì)體現(xiàn)出來。參見“軟件開發(fā)學(xué)習(xí)路線”小節(jié)。
3.2學(xué)習(xí)要點(diǎn) 確立的學(xué)習(xí)路線之后,我們還需要總結(jié)一下Java的學(xué)習(xí)要點(diǎn),這些要點(diǎn)在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對(duì)它們進(jìn)行匯總,不要嫌我婆婆媽媽啊。
3.2.1勤查API文檔當(dāng)程序員編寫好某些類,覺得很有成就感,想把它貢獻(xiàn)給各位苦難的同行。這時(shí)候你要使用“Javadoc”工具(包含在JDK中)生成標(biāo)準(zhǔn)的Java DOC文檔,供同行使用。J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE DOC文檔官方下載地址:http://Java.sun.com/j2se/1.5.0/download.jsp,你可以到google搜索CHM版本下載。也可以在線查看:http://Java.sun.com/j2se/1.5.0/docs/api/index.html。對(duì)待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。當(dāng)需要某項(xiàng)功能的時(shí)候,你應(yīng)該先查相應(yīng)的DOC文檔看看有沒有現(xiàn)成的實(shí)現(xiàn),有的話就不必勞神費(fèi)心了直接用就可以了,找不到的時(shí)候才考慮自己實(shí)現(xiàn)。使用步驟一般如下: ●找特定的包,包一般根據(jù)功能組織。●找需要使用類,類命名規(guī)范的話我們由類的名字可猜出一二。●選擇構(gòu)造器,大多數(shù)使用類的方式是創(chuàng)建對(duì)象?!襁x擇你需要的方法。
3.2.2 查書/google->寫代碼測(cè)試->查看源代碼->請(qǐng)教別人 當(dāng)我們遇到問題的時(shí)候該如何解決?這時(shí)候不要急著問別人,太簡(jiǎn)單的問題,沒經(jīng)過思考的問題,別人會(huì)因此而瞧不起你??梢韵日艺視絞oogle中搜一下看看,絕大部分問題基本就解決了。而像“某些類/方法如何使用的問題”,DOC文檔就是答案。對(duì)某些知識(shí)點(diǎn)有疑惑是,寫代碼測(cè)試一下,會(huì)給你留下深刻的印象。而有的問題,你可能需要直接看 API的源代碼驗(yàn)證你的想法。萬不得已才去請(qǐng)教別人。
3.2.3學(xué)習(xí)開源軟件的設(shè)計(jì)思想 Java領(lǐng)域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對(duì)這些工具、框架進(jìn)行分析,領(lǐng)會(huì)其中的設(shè)計(jì)思想,有朝一日說不定你也能寫一個(gè)XXX框架什么的,風(fēng)光一把。分析開源軟件其實(shí)是你提高技術(shù)、提高實(shí)戰(zhàn)能力的便捷方法。
3.2.4 規(guī)范的重要性 沒有規(guī)矩,不成方圓。這里的規(guī)范有兩層含義。第一層含義是技術(shù)規(guī)范,多到http://004km.cn下載JSRXXX規(guī)范,多讀規(guī)范,這是最權(quán)威準(zhǔn)確最新的教材。第二層含義是編程規(guī)范,如果你使用了大量的獨(dú)特算法,富有個(gè)性的變量及方法的命名方式;同時(shí),沒給程序作注釋,以顯示你的編程功底是多么的深厚。這樣的代碼別人看起來像天書,要理解談何容易,更不用說維護(hù)了,必然會(huì)被無情地掃入垃圾堆。Java編碼規(guī)范到此查看或下載http://Java.sun.com/docs/codeconv/,中文的也有,啊,還要問我在哪,請(qǐng)參考3.2.2節(jié)。
3.2.5 不局限于Java 很不幸,很幸運(yùn),要學(xué)習(xí)的東西還有很多。不幸的是因?yàn)橐獙W(xué)的東西太多且多變,沒時(shí)間陪老婆家人或女朋友,導(dǎo)致身心疲憊,嚴(yán)重者甚至導(dǎo)致抑郁癥。幸運(yùn)的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達(dá)成心愿。Java不要孤立地去學(xué)習(xí),需要綜合學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、OOP、軟件工程、UML、網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)技術(shù)等知識(shí),用橫向縱向的比較聯(lián)想的方式去學(xué)習(xí)會(huì)更有效。如學(xué)習(xí)Java集合的時(shí)候找數(shù)據(jù)結(jié)構(gòu)的書看看;學(xué)JDBC的時(shí)候復(fù)習(xí)數(shù)據(jù)庫(kù)技術(shù);采取的依然是“需要的時(shí)候再學(xué)”的原則。
4.結(jié)束語需要強(qiáng)調(diào)的是,學(xué)習(xí)軟件開發(fā)確實(shí)有一定的難度,也很辛苦,需要付出很多努力,但千萬不要半途而廢。本文如果能對(duì)一直徘徊在Java神殿之外的朋友有所幫助的話,筆者也欣慰了。哈哈,怎么聽起來老氣橫秋呀?沒辦法,在電腦的長(zhǎng)期輻射之下,都快變成小老頭了。最后奉勸各位程序員尤其是MM程序員,完成工作后趕快遠(yuǎn)離電腦,據(jù)《胡播亂報(bào)》報(bào)道,電腦輻射會(huì)在白皙的皮膚上面點(diǎn)綴一些小黑點(diǎn),看起來鮮艷無比……
第三篇:如何深入學(xué)習(xí)java
在開發(fā)領(lǐng)域的技術(shù)人員,只有不斷地充電提高才能夠讓自己始終處于不敗之地。技術(shù)日新月異,推陳出新,讓技術(shù)人員目不暇接。我們都知道,java技術(shù)是目前最流行的編程語言,java入門很難簡(jiǎn)單,可是要想成為高手,拿到更高的工資,還需要深入學(xué)習(xí),那么如何深入學(xué)習(xí)java?
Oracle的Java EE 6提供了三大新技術(shù)和更多豐富組件和強(qiáng)勁的特色功能,很先進(jìn)、實(shí)用,并且容易掌握,絕對(duì)值得java程序員等技術(shù)人員深入學(xué)習(xí),全面提升自身的核心競(jìng)爭(zhēng)力。
Java EE 6的第一大新技術(shù)就是支持JAX-RS(JSR 311),JAX-RS是RESTful Web Services Java API的簡(jiǎn)寫,Java EE 6包含了它的最新1.1版本,它可以讓程序員迅速構(gòu)建遵循REST(Representational State Transfer,表象化狀態(tài)轉(zhuǎn)變)風(fēng)格軟件架構(gòu)的輕量級(jí)Web服務(wù),它對(duì)于每個(gè)資源都使用全局引用標(biāo)識(shí)符URI,并擁有直接通過HTTP傳輸數(shù)據(jù)的能力,可以使用標(biāo)準(zhǔn)的固定動(dòng)詞—GET,PUT,POST和DELETE等來操作這些資源。同時(shí),JAX-RS為在Java中構(gòu)建RESTful Web服務(wù)提供了標(biāo)準(zhǔn)化API,API還提供了注解、相關(guān)的類和接口,這使得在Java中創(chuàng)建RESTful Web服務(wù)變得簡(jiǎn)單。
Java EE 6的第二大新技術(shù)是它可以支持面向Java EE平臺(tái)的上下文和依賴性注入-CDI(JSR 299),CDI是Context and Dependency Injection的簡(jiǎn)寫,它是Java EE平臺(tái)的Web層和企業(yè)層之間的一座橋梁。通過CDI,不僅可以讓企業(yè)層通過諸如EJB和JPA等技術(shù),對(duì)事務(wù)性資源提供強(qiáng)有力的支持。同時(shí),通過CDI,使得Web層也能夠支持事務(wù),這樣在Web應(yīng)用程序中訪問事務(wù)資源就更容易了。
支持Bean驗(yàn)證(JSR 303)是Java EE 6的第三大新技術(shù),Bean驗(yàn)證提供了一個(gè)遵循JavaBean規(guī)范編寫的Java類,它提供了標(biāo)準(zhǔn)驗(yàn)證框架,并可在應(yīng)用程序的所有層之間共享,簡(jiǎn)化了驗(yàn)證,減少重復(fù)、錯(cuò)誤和凌亂。
以上三種技術(shù),就是深入學(xué)習(xí)java必備的,當(dāng)然,強(qiáng)大的java不只這些,需要學(xué)習(xí)的還有很多,同時(shí)也需要連續(xù)的練習(xí),這樣才能成為真正的java高手。如何深入學(xué)習(xí)java
長(zhǎng)沙java培訓(xùn)http:///
第四篇:JAVA學(xué)習(xí)
買本《java瘋狂講義》 或者 在網(wǎng)上下載下來看看主要看java語法部分和面向?qū)ο缶幊滩糠诌@些要速度過 接下來開始寫一些小例子 從例子里面學(xué)習(xí)會(huì)更快例子差不多了就開始web方面的涉獵,先學(xué)struts->jsp->servlet->hibernate->spring學(xué)習(xí)javascript
第五篇:Java學(xué)習(xí)路線
怎么學(xué)習(xí)Java,這是很多新手經(jīng)常會(huì)問我的問題,現(xiàn)在我簡(jiǎn)單描述下一個(gè)Java初學(xué)者到就業(yè)要學(xué)到的一些東西:
首先要明白Java體系設(shè)計(jì)到得三個(gè)方面:J2SE,J2EE,J2ME(KJAVA)。J2SE,Java 2 Platform Standard Edition,我們經(jīng)常說到的JDK,就主要指的這個(gè),它是三者的基礎(chǔ),屬于桌面級(jí)應(yīng)用開發(fā),這部分如果學(xué)得好很容易拓展J2EE和J2ME。J2ME,The Micro Edition of the Java 2 Platform。主要用于嵌入式Java,如手機(jī),PDA等等。J2EE,Java 2 Platform,Enterprise Edition,就是所謂的企業(yè)級(jí)Java,適合企業(yè)的大型應(yīng)用開發(fā)。
J2SE:
新手最初學(xué)習(xí)的時(shí)候先要從J2SE開始學(xué)起,所包含的內(nèi)容主要分為:面向?qū)ο蟾拍畹睦斫?、Java基本語法的學(xué)習(xí),Java桌面圖形界面應(yīng)用程序的開發(fā),掌握常用的Java API等(關(guān)鍵是要學(xué)會(huì)怎樣查閱)。
重點(diǎn):Java基本語法(循環(huán)結(jié)構(gòu),數(shù)據(jù)類型,數(shù)組,運(yùn)算符等)、Swing,awt,事件機(jī)制、文件輸入輸出流處理等
難點(diǎn):面向?qū)ο笏枷氲睦斫猓ń涌凇㈩惖龋?、線程、socket網(wǎng)絡(luò)編程等
視頻教程推薦:孫鑫的Java基礎(chǔ)視頻教程、張孝祥的Java基礎(chǔ)視頻教程,講的都很細(xì),而且這兩位老師在教學(xué)方面都有很好的經(jīng)驗(yàn)。
J2EE:
在學(xué)習(xí)了J2SE之后,你可以嘗試著慢慢過渡到J2EE,當(dāng)然,學(xué)習(xí)J2EE海需要很多非JAVA技術(shù)的支撐,比如數(shù)據(jù)庫(kù)技術(shù),網(wǎng)頁(yè)編程技術(shù)等等,待會(huì)我會(huì)詳細(xì)介紹這兩方面的內(nèi)容。J2EE有三個(gè)必學(xué)的框架,如果你說你學(xué)了J2EE,但又不會(huì)這三個(gè)框架的話,那會(huì)讓人笑掉大牙,這三個(gè)框架分別是Struts、Spring和Hibernate,雖然這三個(gè)框架應(yīng)用很廣,但不代表這三個(gè)框架就代表了J2EE,J2EE還有很多其他的東西,比如EJB,作為一款重量級(jí)(此重量級(jí)不是指重量級(jí)選手那個(gè)意思,此重量級(jí)非彼重量級(jí))框架,雖然這個(gè)應(yīng)用慢慢的再被其他框架所取代,但EJB3.0的出現(xiàn)也給它帶回一些生機(jī),作為一個(gè)分布式應(yīng)用的框架,也是大家要去學(xué)習(xí)和了解的知識(shí)。
當(dāng)然,剛才說到J2EE包含的范圍很廣,即使我把我所了解的所有技術(shù)說出來,也并不能代表J2EE,這是一個(gè)很深很廣的學(xué)問,需要大家以后再工作的時(shí)候慢慢去發(fā)現(xiàn)了。我所了解的還包括:
JDBC:Java數(shù)據(jù)庫(kù)連接對(duì)象,基礎(chǔ)中的基礎(chǔ),Hibernate也只是對(duì)它的封裝而已 JNDI: Java 命名與目錄接口,J2EE重要規(guī)范之一 EJBS: 上面已經(jīng)提到過了
RMI: 提供遠(yuǎn)程調(diào)用方法的支持,主要用于程序分布式開發(fā) JMS: Java消息服務(wù),中間件技術(shù)
JAVA IDL: 提供J2EE平臺(tái)與CORBA交互能力和互聯(lián)能力的技術(shù) JTS: 組件事務(wù)監(jiān)視器 JTA: 事務(wù)劃分的一個(gè)技術(shù) JAVAMAIL: Java中的郵件技術(shù) JAF: Java啟動(dòng)框架,沒研究過 Log4j,一款日志處理的框架應(yīng)用
Junit:?jiǎn)卧獪y(cè)試的好幫手
freemarker、velocity:兩款不錯(cuò)的模板引擎
與Flash的交互Flex:目前很多的SNS應(yīng)用就是使用到了這個(gè)技術(shù)
Web services:想知道我們論壇天氣預(yù)報(bào)的效果是怎么做的嗎?請(qǐng)關(guān)注這個(gè)技術(shù) SOA:面向服務(wù)架構(gòu),未來技術(shù)發(fā)展的趨勢(shì)之一 ……
不過前面介紹到得這些都不是J2EE的基礎(chǔ),是屬于框架應(yīng)用級(jí)別的.要真正把上面說到的知識(shí)掌握好,還是的學(xué)習(xí)J2EE最核心的東西:JDBC、JSP、servlet和JavaBean,后面三個(gè)也是學(xué)習(xí)SSH的基礎(chǔ)(StrutsSpringHibernate的簡(jiǎn)稱).鑒于J2EE的內(nèi)容太過復(fù)雜,建議大家最初只學(xué)習(xí): JSP, servlet和JavaBean,等這個(gè)基礎(chǔ)掌握好再把SSH學(xué)習(xí)了,再對(duì)其他J2EE技術(shù)有個(gè)大致的了解就可以出去找工作了。當(dāng)然,找工作的前提除了把Java學(xué)習(xí)好,還會(huì)有一些其他的技術(shù)也是必須要掌握的。數(shù)據(jù)庫(kù)技術(shù):
數(shù)據(jù)庫(kù)幾乎是程序中不可或缺的一部分,在整個(gè)軟件開發(fā)中更是占據(jù)了重要作用.數(shù)據(jù)庫(kù)在整個(gè)軟件中扮演的是地基的角色,你要修房子,就要先打好地基,你要做軟件,就要先設(shè)計(jì)好的數(shù)據(jù)庫(kù).目前數(shù)據(jù)庫(kù)幾乎都是關(guān)系型數(shù)據(jù)庫(kù),代表的有: SQL Server,目前最新的好像是2008,我不是很喜歡追趕時(shí)髦,用的還是2005,不過也很不錯(cuò)了,在此之前還有2000.MySQL,最知名的開源數(shù)據(jù)庫(kù)之一,我很喜歡它的小巧耐用,學(xué)過SQL SERVER數(shù)據(jù)庫(kù)再學(xué)它,無師自通,易如反掌.ORACLE.甲骨文公司的產(chǎn)品,大型數(shù)據(jù)庫(kù),正版的一般公司買不起.只有看看了,不過現(xiàn)在Java開發(fā)60%都是會(huì)使用到這個(gè)數(shù)據(jù)庫(kù),再加上現(xiàn)在甲骨文已經(jīng)把sun公司收購(gòu)了,JAVA和ORACLE得關(guān)系更加曖昧,各位得多花些時(shí)間在這上面了.除了這些,你還應(yīng)該了解一些桌面應(yīng)用軟件開發(fā)用到的數(shù)據(jù)庫(kù),比如說sqlite。你在制作安裝程序的時(shí)候可以把這個(gè)數(shù)據(jù)庫(kù)打包進(jìn)你的安裝程序。
網(wǎng)頁(yè)編程基礎(chǔ):
網(wǎng)頁(yè)編程基礎(chǔ)要學(xué)的內(nèi)容也比較多,但主要集中在以下這三個(gè)技術(shù)之上,大家每天看的各種樣式的網(wǎng)頁(yè)都是它們呈現(xiàn)的: HTML:超文本標(biāo)記語言 CSS:層疊樣式表
Javascript:瀏覽器客戶端腳本語言
現(xiàn)在更是流行各種JavaScript庫(kù),比如:Jquery、ExtJs等,你要是會(huì)其中的某一個(gè)庫(kù)的使用,找工作so easy。
J2ME:
如果你在學(xué)習(xí)了以上技術(shù)還不過癮,可以再學(xué)習(xí)手機(jī)程序的開發(fā),就我個(gè)人看來,開發(fā)手機(jī)程序技術(shù)其實(shí)蠻簡(jiǎn)單的,難點(diǎn)在于優(yōu)化,比如怎么讓你寫的程序盡量的節(jié)約手機(jī)資源,“代碼誠(chéng)可貴,手機(jī)價(jià)更高“,所以不得不比PC機(jī)多考慮很多成本和實(shí)用性問題。J2ME的學(xué)習(xí)的話,切忌不要單純的再模擬器上測(cè)試,一定要找真機(jī)測(cè)試,真機(jī)和模擬器的效果之間差別是很大的。更多手機(jī)開發(fā)技術(shù),有興趣的朋友可以和我一起探討。
開發(fā)工具:
開發(fā)工具的選擇主要還是看大家的習(xí)慣,我個(gè)人比較喜歡使用eclispe,功能很強(qiáng)大,也很好拓展其他的功能。當(dāng)讓初學(xué)你也可以選擇JCreator,或者最好就直接用記事本。等你熟悉了Java代碼之后,就可以使用JBuilder、eclispe或者netbeans這一類的工具了。
先說到這里先,以后大家一起完善這個(gè)帖子。盡量再給大家整理一些學(xué)習(xí)的資源在這里。也歡迎大家一起整理我文章中提到的一些技術(shù)資源和開發(fā)工具。最后,再和大家分享一句話:生命欣欣向榮,唯奮斗不息。也和大家分享一幅Java學(xué)習(xí)路線圖: