本文大綱
1.Java是什麼
2.Java歷史
3.Java技術范圍
3.1 Java SE平台技術范圍
3.2 Java EE技術范圍
3.3 Java 體系技術范圍
4.總結
1.Java是什麼
我認為,要學好一樣東西,首先要知道,自己在學的東西是什麼。沒有一個總體的概念,就會覺得所學到的知識都是一些零星的概念,沒有總體的感覺,很難形成一個知識體系,那東西就很難記得住了。所以在學習Java的時候,我們首先要弄明白,Java是什麼這一問題。
那Java是什麼呢?Java必然是一門編程語言,這是毋庸置疑的。但它卻不僅僅是一門編程語言,它還是一個由一系列計算機軟件和規范形成的技術體系,這個技術體系提供了完善的用於軟件開發和跨平台部署的支持環境,並廣泛應用於嵌入式系統、移動終端、企業服務器、大型機等各種場景[1] 。這句話怎麼理解呢?接觸到後面的內容,你將會深入理解到。在這裡我簡單介紹一下。首先,Java是一門面向對象的編程語言,就如同C#等語言一樣,而與C語言等面向過程的語言不一樣。其次,Java的口號是"Write Once, Run Anawhere",它能通過Java虛擬機等技術,代碼只需一份,編譯成中間語言之後,放到Java虛擬機上運行,Java虛擬機根據本地硬件環境編譯成最終操作系統能識別的語言進行處理,從而擺脫硬件平台的束縛,進行跨平台的開發部署。再有,Java已經廣泛應用到各大場景,那究竟有多廣泛呢,可以看一下以下數據[2]:
2.Java歷史
Java語言在1995年正式發布1.0版本,距今已經有22年了。在這漫長的時間裡,Java又得到了很大的發展。大概的發展歷程和版本升級可以看下圖的發展歷程[3],詳細的情況網上到處可查,我就不多說了。在這裡我主要抽幾個重點時刻來講一下。
了解一個產品的發展歷史,有助於我們對這個產品產生更深刻的認識。也能從中知道一些我們經常用的技術,其實已經在很多年前就出現成熟了。這能讓我們對技術的發展有個大概的了解,知道了技術發展的趨勢,更好的學習各種技術。直至目前,Oracle官網最新發布的JDK為8u111/8u112,想必大家對Java 8的很多特性都還沒有完全熟悉,Java 9又准備到來了。所以不要猶豫,緊跟技術發展路線,才能跟上時代的步伐。
3.Java技術范圍
本來想將這一節命名為"Java技術體系"的,但感覺題目太技術了,說實在我也說不准究竟Java技術體系最正規的表現是怎樣了,所以思前想後,還是命名為"Java技術范圍"這樣一個聽上去不是很響亮的名字,給自己留個余地。
學習一樣東西,我認為比較重要的是先了解究竟這東西包含了什麼內容。對所包含的內容有個大概了解,才能分清主次,知道自己要學什麼,次學什麼。如果對所學習的知識沒有個認識,那就像在沙漠中走路,你永遠不知道什麼時候是個盡頭,心裡沒有底,學起來就漫無目的,事倍功半了。
3.1 Java SE平台技術范圍
首先,要了解Java技術體系,就需要先了解我們經常聽到的JRE、JDK包含了什麼內容。我們通常把Java編程語言、Java虛擬機及Java API類庫三部分統稱為JDK(Java Development Kit),它除包含JRE中所有的東西以外,還有一些開發者用於編譯、調試等工具。下圖是摘自Oracle官網上的Java SE 8的組成描述[4]:
圖中有各種專業名詞,看著挺暈的,所以這裡暫不累贅,如想了解的同學可以先參考官方文檔(http://docs.oracle.com/javase/8/docs/technotes/guides/desc_jdk_structure.html),後續會抽取重點內容進行展開。在這裡講幾點直觀看到的內容。
3.2 Java EE技術范圍
平時在工作中,通常建的網站項目,都需要用到Java EE部分的內容了。Java EE與Java SE有什麼關系呢?簡單來說,Java SE是基礎,沒有Java SE,什麼Java內容都運行不了。而Java EE,是在Java SE基礎上,提供更多的組件供企業級應用開發。從網上找了一幅圖,描述了Java EE 7中的各個組件[5]。
展示這幅圖,主要是想讓大家看看,Java EE涵蓋了我們經常見到的JSP、Servlet、EJB、JPA、JMS等內容,大家先有個印象,知道這些組件是屬於Java EE的內容,今後再對各個組件進行展開講解。
3.3 Java 體系技術范圍
Java平台的相關知識,也就是JDK裡面的內容,是Java的基礎知識,需要打好堅實的基礎。有很多人一開始學習java就去了解框架啊之類的東西,可能可以在短時間內應付到工作,做一些小東西,但當遇到問題的時候,卻不知如何入手,無法解決,這就是基礎知識沒有打牢固的緣故了。學習一門知識,最重要把基礎打牢,能做到舉一反三,其實上層的技術都是底層技術累積出來的,萬變不離其中。所以基礎要打好,才能將一門知識學習。
那基礎打牢之後,就如剛剛所說的,還會有很多累積起來的上層技術、框架以及圍繞其中心的周邊技術、工具等內容。這些知識也是日常工作中會用到的,我們同樣也需對其有所了解。ZeroTurnaround對於當年的Java工具和技術的使用情況等會做一些報告,其中對2014年的報告做了一個思維導圖[6],雖然這兩年的技術會有所發展,開發者的使用比例也會有所改變,但是主流的技術不是一時半刻可以轉變的。圖中提到的技術對我們了解Java體系的技術內容,還是很有參考價值的。
在實際的工作中,我們對上圖中14個范疇幾乎每個都會有所涉及,可見學好Java並不是一件容易的事情。每個范疇的技術都有好幾項,我們精力有限,所以主要關注每個范疇的前一兩項就好。精力無限的同學,在精通了每個范疇的前兩項後,可以再接觸一下後面的技術,做一些對比,總結一下為什麼那個多人用,這個少人用,能力也就得到質的提高了。ZeroTurnaround也對2016的Java工具和技術做了個報告總結,但沒有做成思維導圖,所以沒展示出來,有興趣的同學可以通過此地址https://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-2016/ 了解到2016年的情況。
4.總結
總結一下,這是Java初學的第一篇內容——Java初接觸。文章內沒有對技術進行太多的展開講解,可能有些同學就不耐煩了,認為講這麼多東西沒講到重點,一篇文章看下來沒有學到什麼東西。我個人認為不然。學任何東西,都應該知道自己在學什麼東西,這樣對所學的東西才能應付自如。就好比你要對付一個敵人,人家門口放著刀槍炮艦你就嚇得半死,倉皇逃跑。但如果你走進去看,發現只是只虛張聲勢的蟑螂,那你就能胸有成竹的把刀槍炮彈一一拆解了。本文章主要對Java是什麼、歷史、及技術范圍等內容作了闡述,了解清楚了這些部分,後續的學習就不會彷徨,不會一邊學習,一邊在問自己,"我究竟在學什麼"了!
參考資料:
[1] 周志明(2016年5月),《深入裂解Java虛擬機第二版》
[2] 了解Java技術,2017.1.12取自https://www.java.com/zh_CN/about/
[3] A Short History of Nearly Everything Java, 2017.1.12取自https://zeroturnaround.com/rebellabs/a-short-history-of-nearly-everything-java/3/
[4] Java Platform Standard Edition 8 Documentation,2017.1.12取自http://docs.oracle.com/javase/8/docs/index.html
[5] Java EE 8願望清單:缺少這些,Java EE將不會完美,2017.1.12取自http://www.okbase.net/doc/details/4727
[6] The complete "Java Tools and Technology Landscape for 2014" report data in a single mind map image, 2017.1.12取自https://zeroturnaround.com/rebellabs/the-complete-java-tools-and-technology-landscape-for-2014-report-data-in-a-single-mind-map-image/