從事編程已經有一段時間了,忽然發現,Java做爲個人第一編程語言,本身彷佛對她並有一個系統的思想。當下Java依舊保持着超高的熱度,新特性也不斷出現,從當初學習的java6版本到最近剛出的java9,我意識到本身須要對整個java知識體系作一個梳理。借用一下《老子》裏面的一句話:合抱之木,生於毫末;九層之臺,起於累土;千里之行,始於足下。
堅實的基礎對於編程同樣是重要。
接下來,開始咱們的積累之路吧!java
Java是一門面向對象編程語言,不只吸取了C++語言的各類優勢,還摒棄了C++裏難以理解的多繼承、指針等概念,所以Java語言具備功能強大和簡單易用兩個特徵。Java語言做爲靜態面向對象編程語言的表明,極好地實現了面向對象理論,容許程序員以優雅的思惟方式進行復雜的編程。 Java具備簡單性、面向對象、分佈式、健壯性、安全性、平臺獨立與可移植性、多線程、動態性等特色 。Java能夠編寫桌面應用程序、Web應用程序、分佈式系統和嵌入式系統應用程序等 。--來自百度百科
看完百度的解釋,是否是仍是懵懵懂懂,不知所云?不要緊,隨着後面的接觸,天然而然能理解其中的意思了。c++
Java:由Sun Microsystems公司於1995年5月推出的Java程序設計語言和Java平臺的總稱。Java語言是一種能夠撰寫跨平臺應用軟件的面向對象的程序設計語言,由當時任職太陽微系統的詹姆斯·高斯林(James Gosling)等人於1990年代初開發,它最初被命名爲Oak。Java伴隨着互聯網的迅猛發展而發展,逐漸成爲重要的網絡編程語言。程序員
1991年4月,由James Gosling博士領導的綠色計劃(Green Project)開始啓動,此計劃的目的是開發一種可以在各類消費性電子產品(如機頂盒、冰箱、收音機等)上運行的程序架構。這個計劃的產品就是Java語言的前身:Oak(橡樹)。Oak當時在消費品市場上並不算成功,但隨着1995年互聯網潮流的興起,Oak迅速找到了最適合本身發展的市場定位並蛻變成爲Java語言。正則表達式
1992年3月,因爲Oak已被用做另外一種已存在的編程語言名稱,所以必須選一個新的名字——它就是Java,靈感來源於咖啡。算法
1993年2月,電視機頂盒,FirstPerson試圖從時代華納得到一個電視機頂盒交互系統的一攬子訂單。在那時,因爲綠色計劃不是很成功,隨即失去了時代華納的訂單。因而開發的重心從家庭消費電子產品轉到了電視盒機頂盒的相關平臺上。編程
1995年5月23日,Oak語言更名爲Java,而且在SunWorld大會上正式發佈Java 1.0版本。Java語言第一次提出了「Write Once,Run Anywhere」的口號。c#
1996年1月23日,JDK 1.0發佈,Java語言有了第一個正式版本的運行環境。JDK 1.0提供了一個純解釋執行的Java虛擬機實現(Sun Classic VM)。JDK 1.0版本的表明技術包括:Java虛擬機、Applet、AWT等。數組
1996年4月,10個最主要的操做系統供應商申明將在其產品中嵌入Java技術。同年9月,已有大約8.3萬個網頁應用了Java技術來製做。在1996年5月底,Sun公司於美國舊金山舉行了首屆JavaOne大會,今後JavaOne成爲全世界數百萬Java語言開發者每一年一度的技術盛會。安全
1997年2月19日,Sun公司發佈了JDK 1.1,Java技術的一些最基礎的支撐點(如JDBC等)都是在JDK 1.1版本中發佈的,JDK 1.1版的技術表明有:JAR文件格式、JDBC、JavaBeans、RMI。Java語法也有了必定的發展,如內部類(Inner Class)和反射(Reflection)都是在這個時候出現的。服務器
直到1999年4月8日,JDK 1.1一共發佈了1.1.0~1.1.8九個版本。從1.1.4以後,每一個JDK版本都有一個本身的名字(工程代號),分別爲:JDK 1.1.4 – Sparkler(寶石)、JDK 1.1.5 – Pumpkin(南瓜)、JDK 1.1.6 – Abigail(阿比蓋爾,女子名)、JDK 1.1.7 – Brutus(布魯圖,古羅馬政治家和將軍)和JDK 1.1.8 – Chelsea(切爾西,城市名)。
1998年12月4日,JDK迎來了一個里程碑式的版本JDK 1.2,工程代號爲Playground(競技場),Sun在這個版本中把Java技術體系拆分爲3個方向,分別是面向桌面應用開發的J2SE(Java 2 Platform, Standard Edition)、面向企業級開發的J2EE(Java 2 Platform, Enterprise Edition)和麪向手機等移動終端開發的J2ME(Java 2 Platform, Micro Edition)。在這個版本中出現的表明性技術很是多,如EJB、Java Plug-in、Java IDL、Swing等,而且這個版本中Java虛擬機第一次內置了JIT(Just In Time)編譯器(JDK 1.2中曾並存過3個虛擬機,Classic VM、HotSpot VM和Exact VM,其中Exact VM只在Solaris平臺出現過;後面兩個虛擬機都是內置JIT編譯器的,而以前版本所帶的Classic VM只能之外掛的形式使用JIT編譯器)。在語言和API級別上,Java添加了strictfp關鍵字與如今Java編碼之中極爲經常使用的一系列Collections集合類。
在1999年3月和7月,分別有JDK 1.2.1和JDK 1.2.2兩個小版本發佈。
1999年4月27日,HotSpot虛擬機發布,HotSpot最初由一家名爲「Longview Technologies」的小公司開發,由於HotSpot的優異表現,這家公司在1997年被Sun公司收購了。HotSpot虛擬機發布時是做爲JDK 1.2的附加程序提供的,後來它成爲了JDK 1.3及以後全部版本的Sun JDK的默認虛擬機。
2000年5月8日,工程代號爲Kestrel(美洲紅隼)的JDK 1.3發佈,JDK 1.3相對於JDK 1.2的改進主要表如今一些類庫上(如數學運算和新的Timer API等),JNDI服務從JDK 1.3開始被做爲一項平臺級服務提供(之前JNDI僅僅是一項擴展),使用CORBA IIOP來實現RMI的通訊協議,等等。這個版本還對Java 2D作了不少改進,提供了大量新的Java 2D API,而且新添加了JavaSound類庫。JDK 1.3有1個修正版本JDK 1.3.1,工程代號爲Ladybird(瓢蟲),於2001年5月17日發佈。
自從JDK 1.3開始,Sun維持了一個習慣:大約每隔兩年發佈一個JDK的主版本,以動物命名,期間發佈的各個修正版本則以昆蟲做爲工程名稱。
2002年2月13日,JDK 1.4發佈,工程代號爲Merlin(灰背隼)。JDK 1.4是Java真正走向成熟的一個版本,Compaq、Fujitsu、SAS、Symbian、IBM等著名公司都有參與甚至實現本身獨立的JDK 1.4。哪怕是在十多年後的今天,仍然有許多主流應用(Spring、Hibernate、Struts等)能直接運行在JDK 1.4之上,或者繼續發佈能運行在JDK 1.4上的版本。JDK 1.4一樣發佈了不少新的技術特性,如正則表達式、異常鏈、NIO、日誌類、XML解析器和XSLT轉換器等。
JDK 1.4有兩個後續修正版:
2002年9月16日發佈的工程代號爲Grasshopper(蚱蜢)的JDK 1.4.1
2003年6月26日發佈的工程代號爲Mantis(螳螂)的JDK 1.4.2。
2002年先後還發生了一件與Java沒有直接關係,但事實上對Java的發展進程影響很大的事件,那就是微軟公司的.NET Framework發佈了。這個不管是技術實現上仍是目標用戶上都與Java有不少相近之處的技術平臺給Java帶來了不少討論、比較和競爭,.NET平臺和Java平臺之間聲勢浩大的孰優孰劣的論戰到目前爲止都在繼續。
2004年9月30日,JDK 1.5發佈,工程代號Tiger(老虎)。從JDK 1.2以來,Java在語法層面上的變換一直很小,而JDK 1.5在Java語法易用性上作出了很是大的改進。例如,自動裝箱、泛型、動態註解、枚舉、可變長參數、遍歷循環(foreach循環)等語法特性都是在JDK 1.5中加入的。在虛擬機和API層面上,這個版本改進了Java的內存模型(Java Memory Model,JMM)、提供了java.util.concurrent併發包等。另外,JDK 1.5是官方聲明能夠支持Windows 9x平臺的最後一個JDK版本。
2006年12月11日,JDK 1.6發佈,工程代號Mustang(野馬)。在這個版本中,Sun終結了從JDK 1.2開始已經有8年曆史的J2EE、J2SE、J2ME的命名方式,啓用Java SE 六、Java EE 六、Java ME 6的命名方式。JDK 1.6的改進包括:提供動態語言支持(經過內置Mozilla Java Rhino引擎實現)、提供編譯API和微型HTTP服務器API等。同時,這個版本對Java虛擬機內部作了大量改進,包括鎖與同步、垃圾收集、類加載等方面的算法都有至關多的改動。
在2006年11月13日的JavaOne大會上,Sun公司宣佈最終會將Java開源,並在隨後的一年多時間內,陸續將JDK的各個部分在GPL v2(GNU General Public License v2)協議下公開了源碼,並創建了OpenJDK組織對這些源碼進行獨立管理。除了極少許的產權代碼(Encumbered Code,這部分代碼大可能是Sun自己也無權限進行開源處理的)外,OpenJDK幾乎包括了Sun JDK的所有代碼,OpenJDK的質量主管曾經表示,在JDK 1.7中,Sun JDK和OpenJDK除了代碼文件頭的版權註釋以外,代碼基本上徹底同樣,因此OpenJDK 7與Sun JDK 1.7本質上就是同一套代碼庫開發的產品。
JDK 1.6發佈之後,因爲代碼複雜性的增長、JDK開源、開發JavaFX、經濟危機及Sun收購案等緣由,Sun在JDK發展之外的事情上耗費了不少資源,JDK的更新沒有再維持兩年發佈一個主版本的發展速度。JDK 1.6到目前爲止一共發佈了37個Update版本,最新的版本爲Java SE 6 Update 37,於2012年10月16日發佈。
2009年2月19日,工程代號爲Dolphin(海豚)的JDK 1.7完成了其第一個里程碑版本。根據JDK 1.7的功能規劃,一共設置了10個里程碑。最後一個里程碑版本原計劃於2010年9月9日結束,但因爲各類緣由,JDK 1.7最終沒法按計劃完成。
從JDK 1.7最開始的功能規劃來看,它本應是一個包含許多重要改進的JDK版本,其中的Lambda項目(Lambda表達式、函數式編程)、Jigsaw項目(虛擬機模塊化支持)、動態語言支持、GarbageFirst收集器和Coin項目(語言細節進化)等子項目對於Java業界都會產生深遠的影響。在JDK 1.7開發期間,Sun公司因爲相繼在技術競爭和商業競爭中都陷入泥潭,公司的股票市值跌至僅有高峯時期的3%,已無力推進JDK 1.7的研發工做按正常計劃進行。爲了儘快結束JDK 1.7長期「跳票」的問題,Oracle公司收購Sun公司後不久便宣佈將實行「B計劃」,大幅裁剪了JDK 1.7預約目標,以便保證JDK 1.7的正式版可以於2011年7月28日準時發佈。「B計劃」把不能按時完成的Lambda項目、Jigsaw項目和Coin項目的部分改進延遲到JDK 1.8之中。最終,JDK 1.7的主要改進包括:提供新的G1收集器(G1在發佈時依然處於Experimental狀態,直至2012年4月的Update 4中才正式「轉正」)、增強對非Java語言的調用支持(JSR-292,這項特性到目前爲止依然沒有徹底實現定型)、升級類加載架構等。
到目前爲止,JDK 1.7已經發布了9個Update版本,最新的Java SE 7 Update 9於2012年10月16日發佈。從Java SE 7 Update 4起,Oracle開始支持Mac OS X操做系統,並在Update 6中達到徹底支持的程度,同時,在Update 6中還對ARM指令集架構提供了支持。至此,官方提供的JDK能夠運行於Windows(不含Windows 9x)、Linux、Solaris和Mac OS平臺上,支持ARM、x8六、x64和Sparc指令集架構類型。
2009年4月20日,Oracle公司宣佈正式以74億美圓的價格收購Sun公司,Java商標今後正式歸Oracle全部(Java語言自己並不屬於哪間公司全部,它由JCP組織進行管理,儘管JCP主要是由Sun公司或者說Oracle公司所領導的)。因爲此前Oracle公司已經收購了另一家大型的中間件企業BEA公司,在完成對Sun公司的收購以後,Oracle公司分別從BEA和Sun中取得了目前三大商業虛擬機的其中兩個:JRockit和HotSpot,Oracle公司宣佈在將來1~2年的時間內,將把這兩個優秀的虛擬機互相取長補短,最終合二爲一。能夠預見在不久的未來,Java虛擬機技術將會產生至關巨大的變化。
2011年7月28日,Oracle公司發佈Java SE 1.7
2014年3月18日,Oracle公司發表Java SE 1.8
2017年9月22日,Oracle公司發表Java SE 1.9
1、 Java和C:
一、二者編程思想不一樣,C語言是一種過程式語言,較爲簡單直觀,它是Java,C++等高級語言的基礎。而Java語言是一種面嚮對象語言。
二、Java語言的安全性更好,Java語言很看重程序的安全性。java不容許程序員直接進行指針操做。指針能夠說是C語言中最靈活的一個數據類型,也是最容易出錯的。java就避免了這些問題的產生。
三、Java能夠經過多線程來同時執行多個任務。線程是程序內一個單一的順序控制流程。C語言在某個時刻只能執行一個任務,而Java能夠經過多線程來同時執行多項任務。
2、 Java和C++:
一、Java語言不須要程序對內存進行分配和回收。Java丟棄了c++中不多使用的、很難理解的、使人迷惑的哪些特色,如操做重載、多繼承、自動強制類型轉換。特別的,Java語言不使用指針也沒有指針。在Java語言中,內存的分配和回收都是自動執行的,程序員無需考慮內存碎片的問題。
二、Java語言中沒有指針的概念,引入真正的數組。不一樣於C++中利用指針實現的「僞數組」,Examda,Java引入了真正的數組,同時將容易形成麻煩的指針從語言中去掉,這將有利於防止在c++程序中常見的由於數組操做越界等指針操做而對系統數據進行非法讀寫帶來的不安全問題。
三、Java用接口(Interface)技術取代C++程序中的多繼承性。接口與多繼承有一樣的功能,可是省卻了多繼承在實現和維護上的複雜性。
3、 Java和c#:
一、在面向對象世界裏,一切都是對象Java和C#都是面向對象的語言,它們都遵照面向對象的概念,這也使得這兩種語言很像,至少看起來是這樣.但在具體實現上,這兩種語言仍是有很大差異的.做爲面向對象的語言,Java先於C#面世.一切皆是對象,Java遵照得很好――全部的類都繼承自Object,一點兒問題沒有!然而同時,Java認識到不少時候咱們須要作一些簡單計算:2+3=五、(2==3)=false…這些頻繁使用的簡單的不能再簡單的小東西,咱們有必要封裝起來作成一個個對象再去操做它們嗎?回答是,沒有必要!因而,Java引入了簡單類型,或者叫基本類型,同時引入了值類型的概念.換言之,Java的值類型就是這幾個簡單類型,並且它們是脫離Object以外的概念,它們不是面向對象的元素.Java便成了面向對象+boolean、byte、short、int、long、char、float、double這八個簡單類型。
二、Java更加註重面向對象,更加註重標準化和完美化.因而,Java有了Eclipse,有了JSP、Serverlet、EJB,有了Spring、Structs、Hibernate…C#更加註重實用性和易用性,它封裝的更多一些.因而C#有了VisualStudio,有了ASP.Net、WinFormApp、CommandLineApp、WCF、WPF、WF、EntityFramework…比較而言,Java更開放,朋友不少;C#更封閉,但微軟很給力。
三、2010年1月,Oracle收購了Sun,把MySQL和Java歸入囊中,讓廣大開發者不由對MySQL和Java的前景產生擔心..2008年,C#剛興起的時候,Java已經發展得如火如荼了.但後來C#一直髮展挺快,向Java借鑑的同時,也不斷創新,引入本身的新東西,如:對值類型的大膽改造,引入Linq、Lumda表達式,等.Java和C#都是在發展的.Java計劃也將引入Lumda語法,看來Java也開始放下架子,和C#相互學習了.開放仍是封閉、依靠社區仍是本身開發,Java和C#選擇的道路不一樣,但都將更強大且易於使用。
上圖是來自TIOBE排行榜
能夠看出,Java超高的熱度,這意味着Java前景好、Java比較好找工做。
java擁有龐大的用戶,活躍的社區,語言穩定,能讓你在遇到問題的時候快速找到解決方案。Java有不少企業在用,並且都是用在大項目上,這意味着java有良好的就業環境。
首先Java是一個面向對象的編程語言,容易理解。並且略去了多重加載、指針等難以理解的概念。而且實現了自動垃圾回收,大大簡化了程序設計。並且網上關於java的學習資源太多太多了,如雨後春筍般冒出來的java培訓機構也太多太多了,這都給咱們提供了一個很好的學習環境與氛圍。
Java從出道至今已有10多年的歷史,通過10多年的積累和沉澱,出現了不少優秀的開源社區,如Apache和Spring。這些優秀的社區提供了不少很是好的框架,藉助這些框架可使咱們不用去關注Java底層的開發,而只需關注業務的實現。
其實圖片中包括的並非特別準確,當下行情比上述描述的還要好,薪資其實比上面要更高,職業發展路徑選擇的方式也大於上圖所示。但前提是,學好的狀況下!
聽完以上描述,是否是已經火燒眉毛的想要投入Java的懷抱了?還等什麼,快上車,來不及了!
轉載請註明:呆萌鍾 » [Java Review 01] Hello,Java!