Java版本歷史

Java語言自JDK1.0版本以來經歷了許多次更新，也在基本程式庫中增加了大量的類別和套件。從J2SE 1.4開始，Java語言的變動由 Java Community Process管理。除了語言上的變化，多年來Java標準庫。Java 7發布後，Oracle承諾回到以前每兩年發布一次的發布週期。但在2013年時，Oracle卻宣佈他們將Java 8延遲一年發表，官方表示是為了修復Java的安全漏洞。2017年9月，Java 平臺的主架構師 Mark Reinhold 發出提議，要求將 Java 的功能更新週期從之前的每兩年一個新版本縮減到每六個月一個新版本。該提議獲得了透過，並在提出後不久生效。Java 17, 11, 8 為目前提供支援的 LTSJDK Alpha 和 Beta.第一個1995年發布的alpha和beta Java公開版本，API和ABI非常不穩定。 支援Java Web瀏覽器被取名為WebRunner。JDK 1.0.第一個版本於1996年1月23日發布，叫做為Oak。而真正第一個穩定的版本JDK 1.0.2，被稱作Java 1。JDK 1.1.1997年2月19日發布。新增功能主要包括：J2SE 1.2.1998年12月8日發布，代號為Playground。 該版本到J2SE 5.0為止的後續版本被更名為Java 2，而版本名稱「J2SE」基礎平臺。這是Java的一個非常重要的版本，它將Java平臺的大小增加至原先的三倍，在59個程式包中達到了1520個類。主要增加包括：J2SE 1.3.代號為Kestrel。在版本中最著名的改變包括：J2SE 1.4.代號為Merlin。2002年2月6日釋出了JSR 59，是第一個在JCP下開發的Java平臺。主要的變化包括︰Java 1.4開放支源和安全性更新於2008年10月終止。Oracle客戶的付費的安全性更新也在2013年2月結束。J2SE 5.0.代號為Tiger。這個在2004年9月30日釋出的版本原本以1.5編號，也就是仍然使用內部版本編號。這個數字輩改變是為了「更好地反映成熟度、穩定性、可擴充性和 J2SE 的安全水準」。這個版本是在JSR 176底下被開發。J2SE 5.0在2008年4月8日進入其即將停止公開更新的期間；2009年11月3日正式不公開開放更新。Oracle客戶直到2015年5月都能透過付費的方式取得更新 。Tiger增加了若干個重要的新語言功能。另外也有以下這些對於基本程式庫的改善：Java 5是Java的最後一個正式支援Microsoft Windows 98和Windows ME的版本，而Windows Vista是J2SE 5在2009年10月的Java 5生命週期之前支援的Windows的最新版本。Java 5 Update 5和Windows NT 4.0上執行的最後一個版本。Java 5 最初出現在 Mac OS X 10.4 時成為了預設的 Java 版本。版本控制系統的改變.此版本推出了JAVA語言中，一個新的版本控制系統，而舊版本控制系統仍然可以在開發者資源庫中繼續使用。Both version numbers "1.5.0" and "5.0" are used to identify this release of the Java 2 Platform Standard Edition. Version "5.0" is the product version, while "1.5.0" is the developer version. The number "5.0" is used to better reflect the level of maturity, stability, scalability and security of the J2SE.——這種對應關係持續維持到以後的版本 (Java 6 = JDK 1.6, Java 7 = JDK 1.7, 以此類推).Java SE 6.代號為Mustang。版本釋出於2006年12月11日，Sun把原本的名稱「J2SE」改為「Java SE」，然後再從版本號中去掉「.0」，而開發者內部編號仍然是1.6.0。這個版本是根據JSR 270開發的。在發展階段，新版本大約每一週都會釋出一些功能增強和漏洞的修復。Beta版本在2006年2月和6月釋出，也就是為什麼2006年12月11日變成最終的版本。本版本包含的主要更改：Java 6可以安裝到在64位的32位和64位機器也支援Java 6。Java 6在2013年2月到了它支援生命週期的尾聲，此時所有公開更新都計劃停止。 Oracle在2013年3月和4月發布了另外兩個對Java 6的更新，修補了一些安全漏洞。Java 6 更新.JAVA 6釋出後，Sun和後來的Oracle，釋出了幾個更新，而不更改任何公開的API，增強了終端使用者的可用性或固定的漏洞。Oracle曾宣告，自2016 年1月，JAVA 6和其它更舊的版本已無法從Oracle下載；但在此之後，Oracle於其官網重新提供各個舊版本的下載。Java SE 7.JAVA 7 中列出了很多的改變。在 Java 7 中新增的功能包括：* 在switch中使用字串型別* try語句中的自動資源管理* 針對泛型例項的建立而改善的型別推論，被稱為鑽石運算子codice_10* 簡化了varargs方法的宣告* 二進位整數字面值* 允許在數值字面值中加入下劃線* 允許在一個 catch 中捕捉多個型別的異常，並使用改進的型別檢查重新丟擲異常Lambda。從2012年4月開始，Java 7 一直是java.com的預設下載版本，直到 Java 8 釋出。Java 7 更新.Oracle 在每季度發布 Java 7 家族每季的公開更新，至2015年4月產品支援生命週期結束時停止。Java SE 8.Java 8 於2014年3月18日釋出， 包含了一些原本被計畫在 Java 7卻延遲的功能。這些功能改進在 JDK Enhancement Proposals (JEPs) 的指導下得到了整合。Java 8 不再支援 Windows XP ，但JDK 8 第 25 版更新仍然可以在 Windows XP安裝和執行。 先前JDK 8的更新版本可以在XP中執行，但必須透過強制解壓安裝程式來進行安裝。2014年10月後，Java 8 成為官方網站上預設的下載版本。Java SE 9.在2011年的JavaOne中，Oracle討論了一些他們希望在2016年於Java 9中釋出的功能。Java 9 應當對千兆級堆擁有更好的支援，同時能夠更好地整合本機程式碼，且擁有新的垃圾收集器G1和能夠自我調節的JVM。2016年初，Java 9 的釋出被重新定為2017年3月；2017年3月時，釋出日期又被拖延至2017年7月；後來又因Java執行委員會對Jigsaw專案實現的分歧而最終定為2017年9月21日，在此期間Oracle回應了部分疑問，並對一些重要的技術問題進行了修正。在2017年6月的最後幾天，JCP對擬議的模組系統方案達成了共識。Java 9 的首個釋出候選版於2017年8月9日釋出，首個穩定版於2017年9月21日釋出。Java SE 10.OpenJDK 10 於2018年3月20日釋出。此次更新包含以下12個新特性：第一個 JEP，JEP 286 "區域性變數型別推斷"，允許使用 var 關鍵字，使編譯器推斷出局部變數的實際型別。所以我們可以這樣做：var list = new ArrayListvar stream = list.stream(); // 推斷為 StreamJava SE 11.JDK 11 於2018年9月25日釋出。Java 11 包含如下更新：Java SE 12.JDK 12 於2019年3月19日釋出。該版本包含較多新特性，例如：預覽功能 JEP 325 擴充了 switch 語句，使它可以用作表示式，並添加了一種新形式的 case 標籤，其中右側是表示式。不需要break語句。 對於複雜的表示式，可以使用codice_14語句。 這在 Java SE 14 中成為了標準。int ndays = switch(month) {case JAN, MAR, MAY, JUL, AUG, OCT, DEC -&gt; 31;case APR, JUN, SEP, NOV -&gt; 30;case FEB -&gt; {if (year % 400 == 0) yield 29;else if (year % 100 == 0) yield 28;else if (year % 4 == 0) yield 29;Java SE 13.JDK 13 於2019年9月17日釋出。該版本包含以下新特性以及很多的強化和很多的漏洞修補。JEP 355 "文字方塊" 允許多行字串文字：String html = """Java SE 14.JDK 14 釋出於 2020 年 3 月 17 日。Java 14 包含了下方列出的新功能，以及“數百個小改進和數千個漏洞修復”。JEP 305, "使用 instanceof 的模式匹配" 簡化了instanceof測試的常見情況，緊接著進行強制轉換。將if (obj instanceof String) {String s = (String) obj;System.out.println( s.length() );取代為if (obj instanceof String s) {System.out.println( s.length() );JEP 359 "記錄類" 允許輕鬆建立簡單的不可變多元組類。Java SE 15.JDK 15 釋出於 2020 年 9 月 15 日。Java 15 增加了對多行字串字面量的支援，此外 Shenandoah 和 ZGC 垃圾收集器也轉為生產級別，不再標記為測試中。該版本移除了對 Solaris 作業系統及 SPARC CPU 的支援，還移除了 Nashron JavaScript 引擎，以及一些根 CA 證書。Java SE 16.JDK 16 釋出於 2021 年 3 月 16 日。Java 16 移除了 AOT 編譯及 Graal JIT 的選項。自 Java 16 開始，允許使用 C++14 來編寫 Java 的實現，且程式碼遷移到了 GitHub，不再使用 Mercurial 版本控制系統。Java SE 17.JDK 17 釋出於2021年9月14日。Java 17是切換到新的6個月釋出週期以來的第二個長期支援。JEP 406 將 instanceof 操作中使用的模式匹配語法擴充套件到 switch 語句和表示式。它允許根據引數型別、null case和精簡模式來選擇caseString toString(Object o) {return switch (o) {case null -&gt; "Null";case String s -&gt; String.format("字串 %s", s);case Long l -&gt; String.format("長整數 %d", l);case Double d -&gt; String.format("浮點數 %f", d);case Integer i &amp;&amp; i &gt; 0 // 精簡模式-&gt; String.format("正整數 %d", i);case Integer i &amp;&amp; i == 0-&gt; "零整數 0";case Integer i &amp;&amp; i  o.toString();Java SE 18.JDK 18 釋出於 2022 年 3 月 22 日。Java SE 19.JDK 19 釋出於 2022 年 9 月 20 日。JEP 405 允許記錄類的模式，擴充 instanceof 運運算元和 switch 表示式的模式匹配功能，以包含顯式引用記錄元件的記錄類模式。int area(Object o) {if (o instanceof Rectangle(int x, int y, int w, int h)) {return w * h;return 0;此類模式可以包括巢狀模式，其中記錄類的元件本身就是記錄類，從而允許模式匹配更多物件圖。Java SE 20.JDK 20 釋出於 2023 年 3 月 21 日。Java SE 21.JDK 21 預計將於 2023 年 9 月 19 日釋出。與僅預覽和孵化 JEP 的 Java 20 相比，Java 21 有 8 個 JEP 未處於預覽或孵化狀態。Java 21 正式引入了在 Java 17 和 Java 19 中首次預覽的功能。 x86 上的 32 位 Windows 版本已棄用並刪除。JEP 445 允許main方法位於未命名的類中：void main() {System.out.println("Hello, World!");而不用：public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");Java SE 22.截至 2023 年 6 月，Java 22 規範尚未最終確定。 Java 22 計劃於 2024 年 3 月發布。實作.OpenJDK 是一個自由及開放原始碼軟體實作在Java Platform, Standard Edition (Java SE)。在OpenJDK之前，許多各式各樣不同的公司和組織推出好幾個免費的Java實作。其中一個例子是Apache Harmony。 IBM也有提供Java實作，而RedHat則是透過IcedTea專案提供它：一個用於OpenJDK的架構和整合專案。