More  

小編的世界 優質文選 c113

「JavaSE」Java語言的發展歷史


2020年8月11日 - c113小編 可樂鴨CutieDuck 
   

這些電子產品有一個共同的特點:計算處理能力和內存都非常有限。所以要求,語言必須非常小且能夠生成非常緊湊的代碼,這樣才能在這樣的環境中執行。另外,由於不同的廠商選擇不同的CPU。因此,要求該語言不能和特定的體系結構綁在一起,要求語言本身是中立的,也就是跨平台的。所以,最初這個語言命名為“Green”,類似於綠色軟件的意思。

1.2 Oak的創立

該團隊最初考慮使用C++語言,但是C++太過複雜,以致很多開發者經常錯誤使用;而且工作小組使用的是嵌入式平台,可用的系統資源及其有限。所以Bill Joy決定開發一種新語言,他提議在C++的基礎上開發一種面向對象的環境,Gosling把這種語言稱為"Oak",橡樹的意思。起名由來1:Gosling向窗外望去,看見一棵老橡樹,於是決定叫Oak

1.3 Java語言的網頁瀏覽器:WebRunner

1992年夏天,Green計劃已經完成了新平台的部分功能,包括Green操作系統、Oak的程序設計語言、類庫等。1992年11月,Green計劃被轉換成"FirstPerson有限公司",一個SUN公司的全資子公司。Green項目組決定競標一個提供視頻點播等新型服務的有線電視盒的項目從而將他們的技術推向市場,但沒有成功。之後花費一年半的時間也沒有找到買家。

1994年夏天,互聯網和瀏覽器的出現不僅給廣大互聯網的用戶帶來了福音,也給Oak語言帶來了新的生機。Gosling立刻意識到這是一個機會,於是對Oak進行了小規模的改造。之後,Patrick Naughton和Jonathan Payne完成了第一個Java語言的網頁瀏覽器:WebRunner,從而讓瀏覽器具有在網頁中執行內嵌代碼的能力。起名由來2:但是後來發現Oak已經被人注冊了商標,所以改名為Java,即太平洋上一個盛產咖啡的島嶼的名字

2. JDK各個版本的特性說明

2.1 1996年1月23日,JDK 1.0發布

JDK 1.0 一個小型的專注於網頁的版本,可用於所有瀏覽器。

1995年年初,SUN公司發布了Java語言,並直接把Java語言放到互聯網上,免費開源給大家使用。之後Java開始走紅,成為了一項廣為人知的編程語言。

SUN雖然推出了Java,但這只是一種語言,如果想要開發複雜的應用程序,就必須要有一個強大的開發類庫。因此,SUN在1996年年初發布了JDK1.0。

JDK1.0包含兩部分:Java運行環境(即JRE)和Java開發環境(即JDK)。

新特性及更新修改:

JVM虛擬機

Applet(java小應用程序)

AWT(java圖形設計)

缺點:

JDK1.0是純解釋運行,使用外掛JIT,性能比較差,運行速度慢。

2.2 1997年2月19日,JDK 1.1發布

JDK 1.1 在用戶界面上有所改進,重寫了事件處理,增加JavaBean。

新特性及更新修改:

JAR(jar包)

JDBC(Java DataBase Connectivity)(連接數據庫)

JavaBeans(java規範)

RMI(遠程調用)

Inner Class(內部類)

Reflection(反射)

在1996年底,Flash出世了,它可以不使用任何語言就可以做出豐富多彩的動畫。緊接著,Flash逐漸蠶食了Java在網頁上的應用。在當時,Java雖然是互聯網上廣泛使用的編程語言,但它並沒有找到自己的准確定位。因為Java可以編寫網頁Applet,但Flash也一樣可以做到,而且更快、開發成本更低。

2.3 1998年12月4日,JDK 1.2發布第一個里程碑

技術體系拆分為三個版本:

J2SE:標准版。整個Java技術的基礎和核心,它是J2EE和J2ME編程的基礎。

J2EE:企業版。Java技術中應用最廣泛的部分,提供企業應用開發的相關內容。

J2ME:微型版。面向手機等移動端開發,主要用於控制移動設備和家電等有限存儲的設備。

新特性及更新修改:

Collection(集合框架)

JIT(Just In Time)編譯器:內置了JIT<即時編譯>,會將經常用到的指令保存在內存中,當下次調用時就不要重新編譯了,通過這種方式讓JDK在效率上有了較大提升。

JDBC中引入可滾動結果集,BLOB,CLOB,批量更新和用戶自定義類型

JFC(Java Foundation Classes), 包括Swing 1.0, 拖放和Java2D類庫

對打包的Java文件進行數字簽名。

Java插件

Applet中添加聲音支持

2.4 2000年5月8日,JDK 1.3發布

新特性及更新修改:

數學運算

Timer API(時間)

jar文件索引

CORBA IIOP實現RMI的通信協議

Java Sound API(聲音)

Java 2D新特性

2.5 2004年02月6日,JDK 1.4發布

提升了Java計算的性能與縮放能力,在性能上比1.3提升了將近60%,基於圖形界面的響應速度提升了40%。至今在用。

新特性及更新修改:

XML處理

Logging API

JDBC 3.0 API

斷言

鏈式異常處理

Java打印服務

支持正則表達式

引入Imgae I/O API

支持IPV6

Java Web Start

Preferences API

2.6 2004年9月30日,JDK 1.5發布第二個里程碑

SUN將JDK1.5改名為JDK5.0J2SE更名為JavaSE;J2EE更名為JavaEE;J2ME更名為JavaME

此外,JDK5.0在語法上做了很大的改進,例如:自動裝箱,泛型,枚舉,可變參數,遍曆循環(foreach循環)等。

新特性及更新修改:

自動裝箱與自動拆箱

增強循環,可以使用迭代方式

泛型

枚舉

可變參數

靜態引入

元數據(注解Annotations)

Instrumentation

2.7 2006年12月11日,JDK 6發布

這個版本對Java虛擬機內部做了大量改進,包括鎖與同步、垃圾收集、類加載等方面的算法都有很大的改動。

新特性及更新修改:

繼承Web Services

可插拔注解

JDBC 4.0API

支持腳本語言

Java Compiler API:compiler API提供編程訪問javac,可以實現進程內編譯,動態產生Java代碼。

2.8 2011年7月28日,JDK 7發布

新特性及更新修改:

switch語句塊中允許以字符串String作為分支條件

異常處理(可以在一個語句塊中捕獲多種異常) try-with-resources

在創建泛型對象時應用類型推斷(增強泛型推斷)

Path接口、DirectoryStream、Files、WatchService(重要接口更新)

引入JSR203 NIO2.0(AIO),新IO的支持

支持動態語言

數字字面量的改進 / 數值可加下劃

null值得自動處理

2.9 2009年4月20日,Oracle收購SUN

Oracle宣布將以每股9.5美元的價格收購Sun,該交易的總價值約為74億美元。Oracle通過收購Sun公司獲得了兩項軟件資產:Java和Solaris。2007年11月,Java語言作為服務器端編程語言,已經取得了極大地成功;而Android平台的流行,則讓Java語言獲得了在客戶端程序上大展拳腳的機會。

2.10 2014年3月18日,JDK 8發布第三里程碑

新特性及更新修改:

Lambda表達式:Lambda表達式可以說是Java 8最大的賣點,它將函數式編程引入了Java。Lambda允許把函數作為一個方法的參數,或者把代碼看成數據。

接口的默認方法與靜態方法:我們可以在接口中定義默認方法,使用default關鍵字,並提供默認的實現。所有實現這個接口的類都會接受默認方法的實現,除非子類提供的自己的實現。

方法引用(含構造方法引用)方法引用提供了非常有用的語法,可以直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,方法引用可以使語言的構造更緊湊簡潔,減少冗餘代碼

Optional 類:Optional 類已經成為 Java 8 類庫的一部分,用來解決空指針異常。

Stream API:新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中

Date/Time API (JSR 310):加強對日期與時間的處理。Java 8新的Date-Time API (JSR 310)受Joda-Time的影響,提供了新的java.time包,可以用來替代 java.util.Date和java.util.Calendar。一般會用到Clock、LocaleDate、LocalTime、LocaleDateTime、ZonedDateTime、Duration這些類,對於時間日期的改進還是非常不錯的。

Base64編碼:在Java 8中,Base64編碼成為了Java類庫的標准。Base64類同時還提供了對URL、MIME友好的編碼器與解碼器。

2.11 2017年9月21日 ,JDK9發布

新特性及更新修改:

模塊系統:模塊是一個包的容器,Java 9 最大的變化之一是引入了模塊系統(Jigsaw 項目)

REPL (JShell):交互式編程環境

多版本兼容 JAR 包:多版本兼容 JAR 功能能讓你創建僅在特定版本的 Java 環境中運行庫程序時選擇使用的 class 版本。(這個在處理向下兼容方面,非常好用)

接口的私有方法:在接口中使用private私有方法。我們可以使用 private 訪問修飾符在接口中編寫私有方法

底層結構:String 存儲結構變更(這個很重要)

集合工廠方法:快速創建只讀集合

增強的 Stream API:改進的 Stream API 添加了一些便利的方法,使流處理更容易,並使用收集器編寫複雜的查詢

全新的 HTTP 客戶端 API:HTTP/2標准是HTTP協議的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服務器推送特性

2.12 2018年3月20日,Java 10正式發布

新特性及更新修改:

局部變量的類型推斷——var關鍵字

GC改進和內存管理 並行全垃圾回收器 G1

垃圾回收器接口

線程-局部變量管控

合並 JDK 多個代碼倉庫到一個單獨的儲存庫中

新增API:ByteArrayOutputStream

新增API:List、Map、Set

新增API:java.util.Properties

新增API: Collectors收集器

2.13 2018年9月26日,Java 11正式發布

新特性及更新修改:

本地變量類型推斷

字符串加強

集合加強

Stream 加強

Optional 加強

InputStream 加強

HTTP Client API

化繁為簡,一個命令編譯運行源代碼

2.14 2019年3月19日,JDK 12發布

2019年3月19日,JDK 12 發布。主要特性包括:switch 支持表達式、Java 微測試套件(JMH 等功能)。其中最引人注目的特性無疑是加入了由 RedHat 領導開發的 Shenandoah 垃圾收集器,Shenandoah 作為首個由非 Oracle 開發的垃圾收集器,其目標又與 OracleJDK 11中發布的 ZGC 幾乎完全一致,兩者天生就存在競爭。Oracle 馬上用實際行動抵制了這個新收集器,JDK 11 發布時才說應盡可能保證 OracleJDK 和 OpenJDK 的兼容一致,轉眼就在 OracleJDK 12 裏把 Shenandoah 的代碼通過條件編譯強行剔除掉,使其成為歷史上唯一進入了 OpenJDK 發布清單,但在 OracleJDK 中無法使用的功能。

2.15 2019年9月13日,JDK 13發布

2019年9月13日,JDK 13 發布,主要特性包括:重新實現傳統套接字API、switch 表達式預覽版、增強 ZGC 將未使用的堆內存返回給操作系統等。

2.16 2020年3月17日,JDK 14發布

主要特性包括:switch 表達式最終版、增強 ZGC 收集器支持 Window/ Mac、棄用 ParallelScavenge + SerialOld 的 GC 組合等。