Java:由Sun Microsystems公司于1995年5月推出的Java程序設計語言和Java平臺的總稱。Java語言是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言凤类,由當時任職太陽微系統(tǒng)的詹姆斯·高斯林(James Gosling)等人于1990年代初開發(fā)破喻,它最初被命名為Oak。Java伴隨著互聯網的迅猛發(fā)展而發(fā)展,逐漸成為重要的網絡編程語言。
Java從第一個版本誕生到現在已經有十九年的時間了。時間若白駒過隙橄浓,轉瞬即逝。彈指間19年過去了亮航,在下圖所展示的時間線中荸实,我們看到JDK已經發(fā)展到了1.8版。在這19年里還誕生了無數和Java相關的產品缴淋、技術和標準∽几現在讓我們走入時間隧道,從孕育Java語言的時代開始宴猾,回顧一下Java的發(fā)展軌跡和歷史變遷圆存。
1991年4月,由James Gosling博士領導的綠色計劃(Green Project)開始啟動仇哆,此計劃的目的是開發(fā)一種能夠在各種消費性電子產品(如機頂盒沦辙、冰箱、收音機等)上運行的程序架構讹剔。這個計劃的產品就是Java語言的前身:Oak(橡樹)油讯。Oak當時在消費品市場上并不算成功,但隨著1995年互聯網潮流的興起延欠,Oak迅速找到了最適合自己發(fā)展的市場定位并蛻變成為Java語言陌兑。
1995年5月23日,Oak語言改名為Java由捎,并且在SunWorld大會上正式發(fā)布Java 1.0版本兔综。Java語言第一次提出了“Write Once,Run Anywhere”的口號。
1996年1月23日软驰,JDK 1.0發(fā)布涧窒,Java語言有了第一個正式版本的運行環(huán)境。JDK 1.0提供了一個純解釋執(zhí)行的Java虛擬機實現(Sun Classic VM)锭亏。JDK 1.0版本的代表技術包括:Java虛擬機纠吴、Applet、AWT等慧瘤。
1996年4月戴已,10個最主要的操作系統(tǒng)供應商申明將在其產品中嵌入Java技術。同年9月锅减,已有大約8.3萬個網頁應用了Java技術來制作糖儡。在1996年5月底,Sun公司于美國舊金山舉行了首屆JavaOne大會上煤,從此JavaOne成為全世界數百萬Java語言開發(fā)者每年一度的技術盛會再愈。
1997年2月19日娇哆,Sun公司發(fā)布了JDK 1.1,Java技術的一些最基礎的支撐點(如JDBC等)都是在JDK 1.1版本中發(fā)布的骚揍,JDK 1.1版的技術代表有:JAR文件格式永部、JDBC独泞、JavaBeans、RMI苔埋。Java語法也有了一定的發(fā)展懦砂,如內部類(Inner Class)和反射(Reflection)都是在這個時候出現的。
直到1999年4月8日组橄,JDK 1.1一共發(fā)布了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個方向,分別是面向桌面應用開發(fā)的J2SE(Java 2 Platform, Standard Edition)殖告、面向企業(yè)級開發(fā)的J2EE(Java 2 Platform糙麦, Enterprise Edition)和面向手機等移動終端開發(fā)的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兩個小版本發(fā)布墓懂。
1999年4月27日焰宣,HotSpot虛擬機發(fā)布,HotSpot最初由一家名為“Longview Technologies”的小公司開發(fā)捕仔,因為HotSpot的優(yōu)異表現匕积,這家公司在1997年被Sun公司收購了。HotSpot虛擬機發(fā)布時是作為JDK 1.2的附加程序提供的榜跌,后來它成為了JDK 1.3及之后所有版本的Sun JDK的默認虛擬機闪唆。
2000年5月8日,工程代號為Kestrel(美洲紅隼)的JDK 1.3發(fā)布钓葫,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日發(fā)布撵枢。
自從JDK 1.3開始,Sun維持了一個習慣:大約每隔兩年發(fā)布一個JDK的主版本,以動物命名锄禽,期間發(fā)布的各個修正版本則以昆蟲作為工程名稱潜必。
2002年2月13日,JDK 1.4發(fā)布沃但,工程代號為Merlin(灰背隼)磁滚。JDK 1.4是Java真正走向成熟的一個版本,Compaq宵晚、Fujitsu垂攘、SAS、Symbian淤刃、IBM等著名公司都有參與甚至實現自己獨立的JDK 1.4晒他。哪怕是在十多年后的今天,仍然有許多主流應用(Spring逸贾、Hibernate陨仅、Struts等)能直接運行在JDK 1.4之上,或者繼續(xù)發(fā)布能運行在JDK 1.4上的版本铝侵。JDK 1.4同樣發(fā)布了很多新的技術特性灼伤,如正則表達式、異常鏈哟沫、NIO饺蔑、日志類、XML解析器和XSLT轉換器等嗜诀。
JDK 1.4有兩個后續(xù)修正版:
2002年9月16日發(fā)布的工程代號為Grasshopper(蚱蜢)的JDK 1.4.1
2003年6月26日發(fā)布的工程代號為Mantis(螳螂)的JDK 1.4.2。
2002年前后還發(fā)生了一件與Java沒有直接關系孔祸,但事實上對Java的發(fā)展進程影響很大的事件隆敢,那就是微軟公司的.NET Framework發(fā)布了。這個無論是技術實現上還是目標用戶上都與Java有很多相近之處的技術平臺給Java帶來了很多討論崔慧、比較和競爭拂蝎,.NET平臺和Java平臺之間聲勢浩大的孰優(yōu)孰劣的論戰(zhàn)到目前為止都在繼續(xù)。
2004年9月30日惶室,JDK 1.5發(fā)布温自,工程代號Tiger(老虎)。從JDK 1.2以來皇钞,Java在語法層面上的變換一直很小悼泌,而JDK 1.5在Java語法易用性上做出了非常大的改進。例如夹界,自動裝箱馆里、泛型、動態(tài)注解、枚舉鸠踪、可變長參數丙者、遍歷循環(huán)(foreach循環(huán))等語法特性都是在JDK 1.5中加入的。在虛擬機和API層面上营密,這個版本改進了Java的內存模型(Java Memory Model械媒,JMM)、提供了java.util.concurrent并發(fā)包等评汰。另外滥沫,JDK 1.5是官方聲明可以支持Windows 9x平臺的最后一個JDK版本。
2006年12月11日键俱,JDK 1.6發(fā)布兰绣,工程代號Mustang(野馬)。在這個版本中编振,Sun終結了從JDK 1.2開始已經有8年歷史的J2EE缀辩、J2SE、J2ME的命名方式踪央,啟用Java SE 6臀玄、Java EE 6、Java ME 6的命名方式畅蹂。JDK 1.6的改進包括:提供動態(tài)語言支持(通過內置Mozilla Java Rhino引擎實現)健无、提供編譯API和微型HTTP服務器API等。同時液斜,這個版本對Java虛擬機內部做了大量改進累贤,包括鎖與同步、垃圾收集少漆、類加載等方面的算法都有相當多的改動臼膏。
在2006年11月13日的JavaOne大會上,Sun公司宣布最終會將Java開源示损,并在隨后的一年多時間內渗磅,陸續(xù)將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本質上就是同一套代碼庫開發(fā)的產品鞋怀。
JDK 1.6發(fā)布以后,由于代碼復雜性的增加持搜、JDK開源密似、開發(fā)JavaFX、經濟危機及Sun收購案等原因葫盼,Sun在JDK發(fā)展以外的事情上耗費了很多資源残腌,JDK的更新沒有再維持兩年發(fā)布一個主版本的發(fā)展速度。JDK 1.6到目前為止一共發(fā)布了37個Update版本贫导,最新的版本為Java SE 6 Update 37抛猫,于2012年10月16日發(fā)布。
2009年2月19日孩灯,工程代號為Dolphin(海豚)的JDK 1.7完成了其第一個里程碑版本闺金。根據JDK 1.7的功能規(guī)劃,一共設置了10個里程碑峰档。最后一個里程碑版本原計劃于2010年9月9日結束败匹,但由于各種原因,JDK 1.7最終無法按計劃完成讥巡。
從JDK 1.7最開始的功能規(guī)劃來看掀亩,它本應是一個包含許多重要改進的JDK版本,其中的Lambda項目(Lambda表達式欢顷、函數式編程)槽棍、Jigsaw項目(虛擬機模塊化支持)、動態(tài)語言支持抬驴、GarbageFirst收集器和Coin項目(語言細節(jié)進化)等子項目對于Java業(yè)界都會產生深遠的影響炼七。在JDK 1.7開發(fā)期間,Sun公司由于相繼在技術競爭和商業(yè)競爭中都陷入泥潭怎爵,公司的股票市值跌至僅有高峰時期的3%特石,已無力推動JDK 1.7的研發(fā)工作按正常計劃進行。為了盡快結束JDK 1.7長期“跳票”的問題鳖链,Oracle公司收購Sun公司后不久便宣布將實行“B計劃”,大幅裁剪了JDK 1.7預定目標墩莫,以便保證JDK 1.7的正式版能夠于2011年7月28日準時發(fā)布芙委。“B計劃”把不能按時完成的Lambda項目狂秦、Jigsaw項目和Coin項目的部分改進延遲到JDK 1.8之中灌侣。最終,JDK 1.7的主要改進包括:提供新的G1收集器(G1在發(fā)布時依然處于Experimental狀態(tài)裂问,直至2012年4月的Update 4中才正式“轉正”)侧啼、加強對非Java語言的調用支持(JSR-292牛柒,這項特性到目前為止依然沒有完全實現定型)、升級類加載架構等痊乾。
到目前為止皮壁,JDK 1.7已經發(fā)布了9個Update版本,最新的Java SE 7 Update 9于2012年10月16日發(fā)布哪审。從Java SE 7 Update 4起蛾魄,Oracle開始支持Mac OS X操作系統(tǒng),并在Update 6中達到完全支持的程度湿滓,同時滴须,在Update 6中還對ARM指令集架構提供了支持。至此叽奥,官方提供的JDK可以運行于Windows(不含Windows 9x)扔水、Linux、Solaris和Mac OS平臺上朝氓,支持ARM魔市、x86、x64和Sparc指令集架構類型膀篮。
2009年4月20日嘹狞,Oracle公司宣布正式以74億美元的價格收購Sun公司,Java商標從此正式歸Oracle所有(Java語言本身并不屬于哪間公司所有誓竿,它由JCP組織進行管理磅网,盡管JCP主要是由Sun公司或者說Oracle公司所領導的)。由于此前Oracle公司已經收購了另外一家大型的中間件企業(yè)BEA公司筷屡,在完成對Sun公司的收購之后涧偷,Oracle公司分別從BEA和Sun中取得了目前三大商業(yè)虛擬機的其中兩個:JRockit和HotSpot,Oracle公司宣布在未來1~2年的時間內毙死,將把這兩個優(yōu)秀的虛擬機互相取長補短燎潮,最終合二為一《筇龋可以預見在不久的將來确封,Java虛擬機技術將會產生相當巨大的變化。
2011年7月28日再菊,Oracle公司發(fā)布Java SE 1.7
2014年3月18日爪喘,Oracle公司發(fā)表Java SE 1.8
Java語言有下面一些特點 :簡單、面向對象纠拔、分布式秉剑、解釋執(zhí)行、魯棒稠诲、安全侦鹏、體系結構中立诡曙、可移植、高性能略水、多線程以及動態(tài)性价卤。(具體會在其他章節(jié)中描述)