Java版本歷史

自JDK 1.0版本以来，Java語言历经了多次迭代更新，并在基础程式庫中持续增添大量類別与包。自J2SE 1.4版本起，Java语言的演变过程交由 Java Community Process（JCP）统一管理，其采用Java规范请求（Java Specification Requests，简称JSRs）的方式，以建议和确定对Java平台各部分内容的新增与修订工作。Java语言的规则遵循《Java语言规范》（Java Language Specification，简称JLS），针对JLS的任何改动均依据JSR 901进行规范化管理。

除了語言上的變化，多年來Java标准庫（JCL）发生了巨大的变化，從JDK 1.0中的幾百個類暴增到J2SE 5中的三千多個類。Swing、Java2D等的全新API被加入其中，而許多原本JDK 1.0的類和方法已被弃用。當然，仍然有一些程式可以將Java程式從新版本的Java平台轉換為較舊版本（例如Java 5.0降轉到1.4）。

Java 7發布後，Oracle承諾回到以前每兩年發布一次的發布週期。但在2013年時，Oracle卻宣布他們將Java 8延遲一年發表，官方表示是為了修復Java的安全漏洞。

2017年9月，Java 平台的主架构师 Mark Reinhold 发出提议，要求将 Java 的功能更新周期从之前的每两年一个新版本缩减到每六个月一个新版本。该提议获得了通过，并在提出后不久生效。

Java 17, 11, 8 为目前提供支持的 LTS（长期支持）版本；Java 10 是上一个快速发布版本，且已不再被支持。2018年9月，随着 Java 11 的发布，Java 10 自当日起不再被支持。Oracle 将在 2019 年 1 月前为商业用途中的 Java 8 长期支持，而针对非商用的更新将继续提供，直至 2020 年 12 月；此外，AdoptOpenJDK 也为 Java 8 提供免费更新。针对 Java 11 的长期支持将不再由 Oracle 提供，而是改由 OpenJDK 社区提供，例如 Eclipse Adoptium（以前称之为 AdoptOpenJDK）

 JDK 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日發布。新增功能主要包括：Version 1.1 press release, Sun.
 AWT事件模型大規模重新編製
 加入了內部類別
 JavaBeans
 JDBC
 RMI
 能夠支援自理的反射能力，在運行時不可能有修改。
 针对 Microsoft Windows 平台上運作的版本，附带由Symantec為JavaSoft生產的JIT编译器
 支持国际化和Unicode，该功能源自

 J2SE 1.2 
1998年12月8日發布，代號為Playground。 该版本到J2SE 5.0為止的後續版本被更名為Java 2，而版本名稱「J2SE」（Java 2平台，標準版）取代JDK以區別J2EE（Java 2平台，企業版） 和J2ME（Java 2 Platform，Micro Edition）基礎平台。這是Java的一個非常重要的版本，它將Java平台的大小增加至原先的三倍，在59個程式包中達到了1520個類。主要增加包括：Version 1.2 press release, Sun.

 strictfp 關鍵字
 主類別中整合了Swing圖像化API
 首次为Sun提供的JVM配備JIT编译器
 Java plug-in（即 Java Applet）
Java IDL，一個与CORBA互通的接口描述语言实现
 Java集合框架

 J2SE 1.3 
代號為Kestrel。在版本中最著名的改變包括：Version 1.3 press release, Sun.Version 1.3 full list of changes , Sun.
 包含了HotSpot JVM（HotSpot JVM第一次被發布是在1999年4月，名為J2SE 1.2 JVM）
 為了支援與CORBA的選擇相容性而修改了RMI
 Java命名和目錄接口（Java Naming and Directory Interface，縮寫JNDI）包含在主程式庫中（先前為擴充元件的形式）
 Java Platform Debugger Architecture (JPDA)
 JavaSound
 用于实现动态代理的类

 J2SE 1.4 
代號為Merlin。2002年2月6日釋出了JSR 59，是第一個在JCP下開發的Java平臺。主要的變化包括︰Version 1.4 press release.Version full 1.4 list of changes .
 語言上的改變
 assert 關鍵字 (在[https://web.archive.org/web/20080616233205/http://www.jcp.org/en/jsr/detail?id=41 JSR 41中被指定)
 程式庫的改善
 仿照Perl的正規表示式
 異常鏈，允許一個异常來封裝原先处于較低級別的异常
 支援Internet Protocol version 6 (IPv6)
 非阻塞I/O（取名為Nonblocking Input/Output，NIO）（在 JSR 51中被指定）
 日誌API (在JSR 47中被指定)
 图像 I/O API來读取和寫入图片，支持JPEG、PNG等格式
 整合了XML解析器和XSLT處理器（JAXP）（指定在JSR 5和JSR 63）
 整合安全和加密擴充元件(JCE, JSSE, )
 内置了Java Web Start(Java Web Start 在2001年3月第一次被釋出，作为J2SE 1.3的可选组件) (指定在JSR 56)
 偏好設定 API (java.util.prefs)
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增加了若干個重要的新語言功能。Version 1.5 press release.Version 1.5 full list of changes.
 泛型（Generics）： 為集合提供編譯期間 （靜態） 型別安全，且不須為大多數類型轉換 （型別轉換） （規範在 JSR 14）
 元資料（Metadata）： 也稱作注解。讓語言結構（像是類別和方法）能夠用額外的資料標記，可以由元資料意識工具處理（規範在 JSR 175）
 自動封裝與解封裝： 在基本的資料型別（如 int）和基本的的外覆類別 （如 Integer） 之間能夠自動轉換 （規範在 JSR 201）
 枚舉（Enumerations）： 以 enum 關鍵字創造出一種型別安全，有排序值的清單（如Day.MONDAY、 Day.TUESDAY 等）；以前這只能透過非型別安全的恒定整數或自行撰寫的類別來達成 （型別安全的枚舉模式） （規範在JSR 201）
 可變參數函數（Varargs）：方法的最後一個參數現在可以用一個類型名稱加上三個點宣告（如：void drawtext(String... lines)）；在調用代碼中，型別中參數裡任何的數字可以被使用，而它們再放在一個陣列來傳遞給方法，或是其它的調用代碼可以傳遞那個型別的陣列
 強化for each 迴圈：for 迴圈的語法被用特別的語法擴充了，适用于陣列或，用于迭代每個成員，如基本的 類別 (規範在 JSR 201)
 改進多執行緒 Java 程式的執行語義；新的 Java 記憶體模型改善了複雜性、 有效性和以前的規格性能
 静态导入
另外也有以下這些對於基本程式庫的改善：
 自動給RMI產生桩模块
 Swing：新的介面外觀，叫做synth
 异步实用工具 在 java.util.concurrent 套件中
 Scanner 類別來解析來自各式各樣的輸入和緩衝
Java 5是Java的最後一個正式支援Microsoft Windows 98和Windows ME的版本，而Windows Vista是J2SE 5在2009年10月的Java 5生命週期之前支援的Windows的最新版本。

Java 5 Update 5（1.5.0_05）是Java在Windows 95（裝了Internet Explorer 5.5 的）和Windows NT 4.0上運行的最後一個版本。

Java 5 最初出現在 Mac OS X 10.4 （Tiger），到了 Mac OS X 10.5 （Leopard）時成為了預設的 Java 版本。

 版本控制系統的改變 
此版本推出了JAVA語言中，一個新的版本控制系統，而舊版本控制系統仍然可以在開發者資源庫中繼續使用。這種對應關係持續維持到以後的版本 (Java 6 = JDK 1.6, Java 7 = JDK 1.7, 以此類推).

 Java 5 更新 
 Java 5 更新表格 版本 釋出日期重點Java SE 52004-10-4Metadata、泛型型別、對基礎型別自動封裝和自動解封裝、 加強 for 迴圈、 枚舉的類型、 靜態類別匯入，格式化I/O、 varargs和併發的實用工具。改進的啟動時間和記憶體佔用量。在多個正在運行的JVM 之間共用的唯讀資料。 遠端監控和管理。一個新的JVM配置API。程序化的堆疊版本追蹤。支持對 XML 1.1 的命名空間、 XML 架構、 SAX 2.0.2，DOM級別3，與XSLT 1.1 快速的XLSTC的編譯器。Unicode 4.0支援。Java SE 5 Update 12004-12-2550個漏洞修復Java SE 5 Update 22005-03-16一些中斷的修復。程式現在以較客製化的方式編譯。日曆漏洞修復和其它漏洞修復。Java SE 5 Update 32005-05-03這個版本修復了一些漏洞，包含在Linux Mozilla外掛的中斷。Java SE 5 Update 42005-07-04在這個版本中，J2SE對於64位元Windows的支持從候選版本中脫穎而出。這個版本在AMD64/EM64T 64位元模式運行用Windows Server 2003 x64 版本的機器。Java SE 5 Update 52005-09-18修復了一些漏洞以及表現增強。對Windows 95 和 Windows NT 4.0最後的更新。Java SE 5 Update 62005-12-07在這個版本之前，Java小程式或應用程式可以決定想要運行的JRE版本，但從這個更新之後就不再是這樣了。所有的程式都用最新版本的JRE運行。Java SE 5 Update 72006-05-29修復了幾個漏洞並提高性能。Java SE 5 Update 82006-08-13修復了一些漏洞以及提高了性能。Java SE 5 Update 92006-11-12這個版本修復了一些小回歸。Java SE 5 Update 102006-12-22添加了由Linux 2.6支持的epoll I/O事件通知工具的實作。 許多漏洞被修復。Java SE 5 Update 112007-03-08修復了幾個漏洞並提高了性能。Java SE 5 Update 122007-06-11Java SE 5 Update 132007-10-05Java Web Start中與本地文件存取相關的多個安全漏洞已修復。 修復了允許繞過網路進入限制的JRE中的安全漏洞。 修復其他幾個安全問題和小錯誤。Java SE 5 Update 14Java SE 5 Update 152008-03-06修復因緩衝堆超出邊界而導致的幾個崩潰漏洞以及其他一些小漏洞。 現在來自AOL，DigiCert和TrustCenter的新的根憑證已經被包含在內。Java SE 5 Update 162008-07-23此版本修復了幾個安全漏洞，例如DoS漏洞，緩衝區溢出和其他可能導致崩潰的漏洞，或是會給程式存取某些系統資源。 這些漏洞位於Java Web Start，Java管理擴充元件（Java Management Extensions，JMX）管理代理以及用於處理XML資料的函數中。Java SE 5 Update 172008-12-03更新了UTF-8字符集，實作以處理非最短形式的UTF-8字節序列，從而引入了與以前版本不相容的問題。 添加了新的根憑證。 許多漏洞被修復。Java SE 5 Update 182009-03-25幾個安全上的問題已解決。 稍微修改了在LDAP目錄中存取Java物件的行為的JNDI功能。 增加了五個新的根憑證。 許多漏洞被修復。Java SE 5 Update 192009-05-29為多個系統配置增加支援。 增加了服務標籤（Service Tag）支持。 許多漏洞被修復，包括幾個崩潰和記憶體洩漏。Java SE 5 Update 202009-08-06解決了幾個安全漏洞，例如不受信任的小程式的潛在系統訪問，以及圖像處理和Unpack200中的整數溢出。 添加了幾個新的根憑證。 許多其它小漏洞已修復。Java SE 5 Update 212009-09-09許多小漏洞被修復。Java SE 5 Update 222009-11-04此版本標記Java 5的End Of Service Life（EOSL），並且是其最終的公開版本。 在報告Sun Alerts 269868、270474、270475和270476中的幾個安全漏洞已修復。 其他幾個漏洞已修復。 此外，還增加了兩個新的根憑證。

 Java SE 6 
代號為Mustang。版本發佈於2006年12月11日，Sun把原本的名稱「J2SE」改為「Java SE」，然後再從版本號中去掉「.0」Java brand naming .，而開發者內部編號仍然是1.6.0。Version 6 , Java webnotes, Sun.這個版本是根據JSR 270開發的。

在發展階段，新版本大約每一周都會釋出一些功能增強和漏洞的修復。Beta版本在2006年2月和6月釋出，也就是為什麼2006年12月11日變成最終的版本。

本版本包含的主要更改：Version 1.6 press release .Version 1.6 full list of changes .
 支持舊的Win9x版本下降；非正式地，Java 6 Update 7是Java的最後一個顯示為在這些版本的Windows上工作的版本。 這被認為是因為在Update 10版本中的主要更改。
 腳本語言支持（Scripting Language Support）（JSR 223）：用於與腳本語言緊密整合的通用API，以及內建的Mozilla JavaScript Rhino整合。
 核心平台Java Lobby .Mustang's HotSpot , Sun weblogs.和Swing性能顯著的改進。
 透過JAX-WS改善的網路服務支援(JSR 224).
 支援JDBC 4.0 (JSR 221).
 Java編譯器API (JSR 199)：允許Java程式以寫程式的方式選擇和呼叫Java編譯器的API。
 將JAXB升級到版本2.0：包括StAX解析器的整合。
 支持pluggable annotations (JSR 269).
 改善許多GUI，像是SwingWorker在API中的整合，表格排序和篩選，以及真正的Swing雙緩衝（消除模糊區域效果）。
 包含JVM改善：同步和編譯器性能優化，新演算法和對現有垃圾收集演算法的升級以及應用程序啟動性能。
Java 6可以安裝到在64位（Core 2 Duo和更高版本）處理器機器上運行的Mac OS X 10.5（Leopard）。 運行Mac OS X 10.6（Snow Leopard）的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于其官网重新提供各个旧版本的下载（需要登录Oracle帐户）。

+Java 6 更新表格 版本 釋出日期 重點Java SE 62006-12-23此版本在Web服務、腳本和資料庫，可插入的註解、安全性以及質量、相容性和穩定性等領域增強了許多功能。 現在也正式支援JConsole。 已增加對Java DB的支援。 Java SE 6 Update 1 2007-05-07 Java SE 6 Update 2 2007-07-03 Java SE 6 Update 3 2007-10-03 Java SE 6 Update 4 2008-01-14 HotSpot VM 10 Java SE 6 Update 5 2008-03-05消除了幾個安全漏洞。 現在包括了來自AOL、DigiCert和TrustCenter的新的根憑證。 Java SE 6 Update 6 2008-04-16引入了對臭名昭彰的Xlib / XCB鎖定斷言問題的解決方法。 當以LoginContext使用Kerberos認證時內存洩漏的問題已被修復。 其它幾個漏洞已修復。 Java SE 6 Update 7  非正式記載的，Java SE 6 Update 7（1.6.0.7）顯示為在Win9x系列作業系統上工作的Java的最後一個版本Java SE 6 Update 102008-10-15HotSpot VM 11. 此更新的主要更改包括：

 Java部署工具包（Java Deployment Toolkit），為一組JavaScript函數，用於簡化和Java Web Start應用程式的部署。
 Java Kernel，一個小小的安裝程式，只包含最常用的JRE類別。 其它套件需要時再自己下載。
 加強更新器。
 增強版本控制和pack200的支援：不再需要伺服器端支援。
 Java Quick Starter，用來加強冷卻啟動時間。
 改進了Windows上的Java2D圖形基本元件的表現，使用Direct3D和硬體加速。
 新的Swing look and feel，名為 Nimbus ，建立在synth基礎之上。
 下一代的Java插件：applet現在已可在個別的程序中運行，並支持Web Start應用程式的許多功能。Java SE 6 Update 112008-12-0313個安全性漏洞修正 Java SE 6 Update 122008-12-12沒有安全性修復；64位元的Java插件（僅適用於64位元的網頁瀏覽器）；支援Windows Server 2008；圖形和JavaFX應用程式的性能改進Java SE 6 Update 132009-03-24 7個安全性漏洞修復，稍作修改JNDI存取LDAP中的Java物件，JMX變更（createMBeanunregisterMBean），添加了4個新的根憑證 Java SE 6 Update 142009-05-28 HotSpot VM 14. 此版本包括對JIT編譯器的大量性能更新，用於64位元機器的壓縮指標，以及對G1（Garbage First）低暫停的垃圾回收器的支援。

-XX:+DoEscapeAnalysis 選項直接指向HotSpot JIT compiler以使用escape analysis來決定本地端物件是否可以被分配到stack上而不是heap裡

一些開發人員已經注意到這個版本中引入的一個問題，它導致除錯器似乎是隨意地錯過斷點（breakpoints）。Sun有一個相應的漏洞，也是一個追蹤問題。 解決方法適用於客戶端和伺服器端的虛擬機。 使用-XX:+UseParallelGC 選項將可以避免錯誤。另一個解決方案是降版到update 13，或是升級到update 16。 Java SE 6 Update 152009-08-04 加入了patch-in-place 功能 Java SE 6 Update 162009-08-11 修復了update 14中導致除錯器錯過斷點的問題。 Java SE 6 Update 172009-11-04 安全修復；兩個新的根憑證 Java SE 6 Update 182010-01-13沒有安全性漏洞修復；Hotspot VM 16；支援Ubuntu 8.04 LTS桌面版、SLES 11、Windows 7、Red Hat Enterprise Linux 5.3、Firefox 3.6、VisualVM 1.2；更新過的Java DB；許多性能改進Java SE 6 Update 192010-03-30 安全性漏洞修復；根憑證更動：加入七個新的，刪除三個，五個替換為更強的簽署演算法；對TLS重新談判攻擊的臨時修補Java SE 6 Update 202010-04-15 2個安全性漏洞修補Java SE 6 Update 212010-07-07 沒有安全性漏洞修復；Hotspot VM 17；支援 Red Hat Enterprise Linux 5.4和5.5、Oracle Enterprise Linux 4.8, 5.4, 5.5、Google Chrome 4與客製讀取進度指示器（Customized Loading Progress Indicators）；VisualVM 1.2.2Java SE 6 Update 222010-10-12 29個安全性漏洞修補; 支援RFC 5746Java SE 6 Update 232010-12-08 沒有安全性漏洞修復；Hotspot VM 19；對由右至左的語言有更好的支援Java SE 6 Update 242011-02-15 21個安全性漏洞修補；更新 Java DBJava SE 6 Update 252011-03-21 沒有安全性漏洞修復；Hotspot VM 20；支援 Internet Explorer 9、Firefox 4和Chrome 10；改善BigDecimal；包含「分層」編譯在伺服器虛擬機以啟用它來跟客戶端需擬機一樣的快速開啟，當達到更好的尖峰表現性能（這個功能要啟用-server和-XX:+TieredCompilation指令選項）Java SE 6 Update 262011-06-07 17新的安全性漏洞修補； 最新的版本能夠和Windows Vista SP1相容Java SE 6 Update 272011-08-16 沒有安全性漏洞修復；給Firefox 5的新憑證Java SE 6 Update 292011-10-1820個安全性漏洞修補；其它許多種漏洞的修補Java SE 6 Update 302011-12-12 沒有安全性漏洞修復；修補SSL回歸在Update 29；支援Red Hat Enterprise Linux 6Java SE 6 Update 312012-02-14 14個安全性漏洞修補和一個漏洞修復；最新的版本能夠夠可靠的在Windows 2000上工作 JAVA SE 6 Update 322012-04-26 沒有安全性漏洞修復；其它許多種漏洞的修補Java SE 6 Update 332012-06-12 14個安全性漏洞修補, 改善VM設定檔的讀取Java SE 6 Update 342012-08-14 沒有安全性漏洞修復；其它許多種漏洞的修補Java SE 6 Update 352012-08-30包含一個深度的安全修補Java SE 6 Update 372012-10-16 30個安全性漏洞修補Java SE 6 Update 382012-12-11 其它許多種漏洞的修補Java SE Development Kit 6 Update 38 Bug Fixes , Oracle.comJava SE 6 Update 392013-02-01 50個安全性漏洞修補Java SE 6 Update 412013-02-19 5個安全性漏洞修補Java SE 6 Update 432013-03-04 2個安全性漏洞修補Java SE 6 Update 452013-04-16 42個安全性漏洞修補；其它的一些改變； 最後的公開更新。自2016年1月起，Java 6（或更早的版本）沒辦法再從Oracle下載Java SE 6 Update 512013-06-18 不公開，只能透過Java SE支援計劃和在Apple Update for OS X Snow Leopard、Lion 和 Mountain Lion 中；最多達到40個安全性漏洞修復Java SE 6 Update 652013-10-15 不公開，只能透過Java SE支援計劃和在Apple Update for OS X Snow Leopard、Lion 和 Mountain Lion 中；最少11個重要的安全性漏洞修復Java SE 6 Update 712014-01-14 不公開下載；33個漏洞修復Java SE 6 Update 752014-04-15 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster no. #54 提供；25個安全性漏洞修復Java SE 6 Update 812014-07-15 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；11個安全性漏洞修復Java SE 6 Update 852014-10-16 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；18個安全性漏洞修復Java SE 6 Update 912015-01-21 Linux x64和Windows i586的版本可在Java SE 6參考實作中使用。其他版本只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；15個安全性漏洞修復Java SE 6 Update 952015-04-14 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；14個安全性漏洞修復Java SE 6 Update 1012015-07-15 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；18個安全性漏洞修復。 給IE 10和11的憑證在1.6.0_101版本中被引入Java SE 6 Update 1052015-10-20 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；17個安全性漏洞修復Java SE 6 Update 1112016-01-20 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；17個安全性漏洞修復Java SE 6 Update 1132016-02-05 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；1個安全性漏洞修復Java SE 6 Update 1152016-04-21 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；8個安全性漏洞修復Java SE 6 Update 1212016-07-19 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；15個安全性漏洞修復Java SE 6 Update 1312016-10-18 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；12個安全性漏洞修復

 Java SE 7 
JAVA 7 （代號DolphinJDK7 , Sun.） 是一個重大的更新，在 2011年7月7日亮相，並在2011年7月28日開放給開發者使用。發展時期被分類成十三个重要階段，最後一個階段在2011年6月6日完成。平均來看，每個里程碑各有8個版本（就是一般包括的功能增強和漏洞修復） 。在 OpenJDK 7 專案中的功能清單中列出了很多的改變。

在 Java 7 中新增的功能包括：
JVM本身对動態語言的支持：新的invokedynamic字节码指令（JSR-292），与多語言虛擬機（Multi Language Virtual Machine）原型
 64位指针压缩（Java 6 中可以使用 XX:+UseCompressedOops 开启）
 一些語言方面的小改變（在Coin專案下的一個小群體）：

 在switch中使用字符串类型
 try语句中的自動資源管理
 針對泛型實例的创建而改善的類型推論，被称为钻石操作符<>
 簡化了varargs方法的声明
 二進位整數字面值
 允許在數值字面值中加入下划线
 允许在一个 catch 中捕捉多个类型的异常，並使用改進的類型檢查重新抛出异常
 JSR 166下的並發實用工具
 新的檔案I/O 程式庫 (JSR 203 定義) 增加多重檔案的支援、檔案原始資料和符號鏈接。新的包為：java.nio.file、java.nio.file.attribute和java.nio.file.spi
 使用 Timsort 來为集合与数组排序，取代归并排序
 對椭圆曲线加密演算法增加标准库级别的支援
 一個給Java 2D的XRender傳遞途徑，改進了現代GPUs特有的功能的處理
 用於圖形功能的新平台API（最初在版本6u10中的實作為不支援的API）
 增強了對新網路通訊協定（包括SCTP和Sockets Direct Protocol）的标准库级别的支持
 更新對XML和Unicode的支持，以符合最新标准
 Java部署規則集

Lambda（Java 對匿名函数的實作）、Jigsaw（Java 對模块化的實作），以及其它一些 Coin 项目中的内容在 Java 7 裡被放棄，而转为Java 8一部份（其中 Jigsaw 直至 Java 9 才得到实现）。

從2012年4月開始，Java 7 一直是java.com的預設下載版本，直到 Java 8 发布。

 Java 7 更新 
Oracle 在每季度發布 Java 7 家族每季的公開更新，至2015年4月產品支援生命週期結束時停止。
+Java 7 更新表格 版本 釋出日期 重點 Java SE 7  2011-07-28  初始版本；HotSpot VM 21 Java SE 7 Update 1  2011-10-18  20個安全漏洞修補；其它漏洞修補 Java SE 7 Update 2  2011-12-12 沒有安全漏洞修補；HotSpot VM 22；可靠性和性能改進；支援 Solaris 11 和 Firefox 5 之後的版本；JavaFX 包含 Java SE JDK, 改善了網頁部屬的應用程式。Java SE 7 Update 3 2012-02-14  14個安全漏洞修補 Java SE 7 Update 4  2012-04-26  沒有安全漏洞修補；HotSpot VM 23; JDK 支援 Mac OS X Java SE 7 Update 5  2012-06-12  14個安全漏洞修補 Java SE 7 Update 6  2012-08-14  JavaFX 和Java Access Bridge 被包含在 Java SE JDK 和 JRE 安裝裡面, JavaFX 支援觸控螢幕和觸控板, JavaFX 支援 Linux, JDK 和 JRE 支援 Mac OS X, JDK 在 ARM 上支援 Linux Java SE 7 Update 7  2012-08-30  4個安全漏洞修補 Java SE 7 Update 9  2012-10-16  30個安全漏洞修補 Java SE 7 Update 10  2012-12-11  新的安全性功能，像是禁用任何Java應用程式在瀏覽器中運行的能力，以及當JRE處於不安全狀況時發出警告的新對話框，另外也有一些漏洞修復 Java SE 7 Update 11  2013-01-13  Olson Data 2012i；修復了在安裝了JavaFX的獨立版本的系統上插件註冊問題, CVE-2013-0422 的安全修復；Java applet和Web啟動應用程式的預設安全級別已從「中」增加到「高」 Java SE 7 Update 13  2013-02-01  50個安全漏洞修補Java SE 7 Update 15 2013-02-19 5個安全漏洞修補Java SE 7 Update 17 2013-03-04 2個安全漏洞修補Java SE 7 Update 21 2013-04-16  許多的改變，包括 42 個安全漏洞修補, 新的不包含插件的伺服器JRE , 以及以 ARM 架構運行的Linux上的JDKJava SE 7 Update 25 2013-06-18  許多的改變，包括 40 個安全漏洞修補Java SE 7 Update 40 2013-09-10  621個漏洞修補； 新的安全性功能, hardfloat ARM, Java 任務控制（Java Mission Control） 5.2和Retina Display支援Java SE 7 Update 45 2013-10-15  51個安全漏洞修補； 防止Java應用程式在未經授權時的重新分發；恢復安全提示；JAXP變化；TimeZone.setDefault的更改Java SE 7 Update 51 2014-01-14  36 個安全漏洞修補； 封鎖沒有表明身分的JAVA小程式（如遠程控制台－Java Applet－IBM IMM卡、HP iLO卡），即使警告對話框中有「將在下一版本中被封鎖」，Oracle to patch Java, other products Tuesday , ZDNet, 17 個漏洞修補Java SE 7 Update 55 2014-04-15  37個安全漏洞修補； 19個漏洞修補Java SE 7 Update 60 2014-05-28  Java Mission Control 5.3，130個漏洞修補Java SE 7 Update 65 2014-07-15  18個漏洞修補Java SE 7 Update 67 2014-08-04  1個漏洞修補Java SE 7 Update 71 2014-10-14  16個漏洞修補Java SE 7 Update 72 2014-10-14 與Update 71相同的釋出日期，作為Java SE 7的相對應補丁集更新（Patch Set Update，PSU）； 36 個漏洞修補Java SE 7 Update 75 2015-01-20  12個漏洞修補； SSLv3預設為禁用Java SE 7 Update 76 2015-01-20  與Update 75相同的釋出日期，作為Java SE 7的相對應補丁集更新（Patch Set Update，PSU）； 97個漏洞修補Java SE 7 Update 79 2015-04-14  21個安全漏洞修補；6個漏洞修補Java SE 7 Update 80 2015-04-14 Java 7的最後一個公開版本；與Update 79相同的發布日期，作為Java SE 7的相對應補丁集更新（Patch Set Update，PSU）；104個漏洞修補Java SE 7 Update 85 2015-07-15  不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；25個安全漏洞修補Java SE 7 Update 91 2015-10-20  不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；20個安全漏洞修補Java SE 7 Update 952016-01-19不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；8個安全漏洞修補Java SE 7 Update 972016-02-05 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；1個安全漏洞修補Java SE 7 Update 992016-03-23 不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；1個安全漏洞修補Java SE 7 Update 1012016-04-18不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；9個安全漏洞修補Java SE 7 Update 1112016-07-19不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；36個安全漏洞修補Java SE 7 Update 1212016-10-18不公開，只能透過Java SE支援計劃和Solaris 10的Recommended Patchset Cluster 提供；32個安全漏洞修補

 Java SE 8 
Java 8 於2014年3月18日釋出，包含了一些原本被計畫在 Java 7卻延遲的功能。

这些功能改进在JDK Enhancement Proposals (JEPs)的指导下得到了整合。
 JSR 335，JEP 126：Lambda專案中提供的語言级匿名函数支持（官方称为 lambda 表达式，非官方亦称闭包）；添加預設方法（虛擬擴充元件方法），以允許在不破坏兼容性的情况下向现有接口中新增方法。Java社群中曾经有过针对是否要加入 lambda 表达式支援的辯論。稍后Sun公司宣布 lambda 表达式將會包含在Java中，并請社群協助改善该特性。支援lambda表达式使得针对流中元素的函数式操作成为可能，由此可以实现由 MapReduce 啟發的函数式集合操作。預設方法允許API作者添加新的方法到现有介面上，而不會破壞舊的程式碼中。預設方法還使得多重繼承的行為 （不是狀態）成为可能，但默认方法的设计意图并非在此。
 JSR 223，JEP 174：Nashorn專案，一個 JavaScript 運行时，它允許開發人員在應用程式中嵌入 JavaScript 程式碼
 JSR 308，JEP 104：在 Java 型別上的註解
 无符號整數算術
 JSR 337，JEP 120：重複註解
 JSR 310，JEP 150：日期和時間 API，基于Joda-Time日期时间处理库的实现。
 JEP 178：靜態連結 JNI 程式庫
 JEP 153：执行 JavaFX 應用程式（直接执行 JavaFX 的應用程式的 JAR 包）
 JEP 122：移除了虚拟机内存管理中的永久世代
Java 8 不再支援Windows XP，但JDK 8 第 25 版更新仍然可以在 Windows XP安裝和運行。先前JDK 8的更新版本可以在XP中運行，但必须通过强制解压安装程序来进行安装。

2014年10月后，Java 8 成为官方網站上預設的下載版本。Blog By Tori Wieldt-Oracle on Oct 27, 2014 

 Java 8 更新 
+Java 8 更新表格 版本 釋出日期 重點 Java SE 8 2014-03-18 初始版本 Java SE 8 Update 5 2014-04-15 使用「*」在Caller-Allowable-Codebase 屬性中; 11個漏洞的修補 Java SE 8 Update 11 2014-07-15 Java 依賴性分析工具（Java Dependency Analysis Tool）; Java 控制台選項以禁用贊助者; JAR 檔案屬性 – Entry-Point; JAXP 處理限制屬性 – maxElementDepth; 18 個安全性漏洞修補, 15 個漏洞修補 Java SE 8 Update 20 2014-08-19 669 個漏洞修補， JMC 5.4, 字串重複數據刪除（預設為不啟用） Java SE 8 Update 25 2014-10-14 10 個漏洞修補 Java SE 8 Update 31 2015-01-19 26 個漏洞修補; SSLv3預設為禁用 Java SE 8 Update 40 2015-03-03 645 個漏洞修補 加入「記憶體壓力」的概念來協助指出有多少的系統記憶體還能夠使用（低壓 = 高記憶體, 高壓 = 低記憶體） Java SE 8 Update 45 2015-04-14 13 個漏洞修補 Java SE 8 Update 51 2015-07-14增加對WIndows平台的原生沙盒的支援（預設為禁用）; 另外還有 25 個安全性修補,14 個漏洞修補 Java SE 8 Update 60 2015-08-18 480 個漏洞修補  Java SE 8 Update 65 2015-10-20 25 個安全性修補, 3 個漏洞修補 Java SE 8 Update 66 2015-11-16 15 個漏洞修補 Java SE 8 Update 71 2016-01-19 8 個安全性修補, 5 個漏洞修補 Java SE 8 Update 72 2016-01-19 8 個安全性修補, 5 個漏洞修補, 許多的增強 Java SE 8 Update 73 2016-02-03 1 個安全性修補 Java SE 8 Update 74 2016-02-03 1 個安全性修補 Java SE 8 Update 77 2016-03-23 1 個安全性修補 Java SE 8 Update 91 2016-04-19 9 個安全性修補, 4 個漏洞修補和增強 Java SE 8 Update 92 2016-04-19來自8u91的安全性和漏洞修補, 再加上 76 個額外的漏洞消補; 推出ExitOnOutOfMemoryError 和CrashOnOutOfMemoryError 標籤 Java SE 8 Update 101 2016-07-19來自8u92的安全性和漏洞修補, 再加上 9個額外的漏洞消補 Java SE 8 Update 102 2016-07-19來自8u101的安全性和漏洞修補, 再加上 118 個額外的漏洞消補 Java SE 8 Update 111 2016-10-18安全性修補和 9 個漏洞修補 Java SE 8 Update 112 2016-10-18新增功能和139個漏洞修補在8u111

 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对拟议的模块系统方案达成了共识。

 JSR 376：在Jigsaw專案中將JDK模組化（参见Java平台模块系统条目）
 JEP 222：jshell：Java Shell（一個 Java 交互式顶层构件）
 JEP 295：AOT编译（通过 Graal VM 实现）
 JEP 268：XML Catalogs
JEP 266：更多的併發更新。包含响应式流的Java实现，及其部分替代品java.util.concurrent.Flow。
JEP 193：变量句柄：定义一个标准方法来调用java.util.concurrent.atomic和sun.misc.Unsafe操作的等价物。
JEP 282：jlink：Java链接器。该工具可以为模块生成一个包含了其所有依赖项的自定义运行时映像，同时允许生成一个包括运行它的JVM的可执行文件，。
JavaDB被移出JDK
JEP 263：高DPI图像：自动缩放与尺寸自适应。

Java 9 的首个发布候选版于2017年8月9日发布，首个稳定版于2017年9月21日发布。

 Java 9 更新 
+Java 9 更新表格版本发布日期亮点Java SE 92017-09-21初始版本Java SE 9.0.12017-10-17安全性修補和嚴重漏洞修補Java SE 9.0.42018-01-16JDK 9 的最终版本。安全性修補和嚴重漏洞修補

 Java SE 10 
OpenJDK 10 于2018年3月20日发布。此次更新包含以下12个新特性：

 JEP 286：局部变量类型推断
 JEP 296：将所有JDK分支整合到同一个版本库中
 JEP 310：应用程序类级别数据共享
 JEP 304：垃圾回收器接口
 JEP 307：适用于G1的多线程完全垃圾回收
 JEP 312：线程本地握手
 JEP 313：删除本地代码头文件生成器javah
 JEP 314：更多的Unicode语言标签扩展
 JEP 316：在可选的内存设备上申请堆内存空间
 JEP 317：实验性的基于Java的JIT编译器。这是 Linux x64 下 Graal 动态编译器的集成。
 JEP 319：内置根证书
 JEP 322：基于时间的版本命名

第一個 JEP，JEP 286 局部变量类型推断，允許使用 var 關鍵字，使編譯器推斷出局部變量的實際類型。
所以我們可以這樣做：
var list = new ArrayList<String>(); // 推斷為 ArrayList<String>
var stream = list.stream();         // 推斷為 Stream<String>

 Java 10 更新 
+Java 11 更新表格版本发布日期亮点Java SE 102018-03-20初始版本Java SE 10.0.12018-04-17安全性修補和五個漏洞修補Java SE 10.0.22018-07-17JDK 10 的最終版本。安全性修補和七個漏洞修補

 Java SE 11（LTS） 
JDK 11 于2018年9月25日发布Java Countdown , Countdown to Java 11 Release Date。Java 11 包含如下更新：

 JEP 181：针对嵌套成员的访问控制
 JEP 309：动态类文件常量
 JEP 315：利用 Aarch64 的特有架构改进其上的性能
 JEP 318：Epsilon：无操作垃圾收集器
 JEP 320：移除 Java EE 和 CORBA 模块
 JEP 321：HTTP Client
 JEP 323：lambda参数的局部变量语法
 JEP 324：支持 Curve25519 和 Curve 448 密钥
 JEP 327：Unicode 10
 JEP 328：添加Java飞行记录器（JFR），其用于创建性能分析记录
 JEP 329：ChaCha20 和 Poly1305 加密算法
 JEP 330：运行单文件源码程序
 JEP 331：低开销堆分析
 JEP 332：支持 TLS 1.3
 JEP 333：添加ZGC（一个可扩展的低延迟垃圾收集器）
 JEP 335：弃用 Nashorn JavaScript 引擎
 JEP 336：弃用 Pack200 相关的工具及 API

 Java 11 更新 
+Java 11 更新表格版本釋出日期重點Java SE 112018-09-25初始版本Java SE 11.0.12018-10-16安全性修補和漏洞修補Java SE 11.0.22019-01-15安全性修補和漏洞修補Java SE 11.0.32019-04-16新功能，安全性修補和漏洞修補Java SE 11.0.42019-07-16新功能，安全性修補和漏洞修補；HotSpot 現在可以正確地偵測 Windows Server 2019Java SE 11.0.52019-10-15新功能，安全性修補和漏洞修補Java SE 11.0.62020-01-14新功能，安全性修補和漏洞修補 Java SE 11.0.7 2020-04-14新功能，安全性修補和漏洞修補Java SE 11.0.82020-07-14新功能，安全性修補和漏洞修補Java SE 11.0.92020-10-20新功能，安全性修補和漏洞修補Java SE 11.0.102021-01-19新功能，安全性修補和漏洞修補Java SE 11.0.112021-04-20新功能，安全性修补和漏洞修补

 Java SE 12 
JDK 12 于2019年3月19日发布。该版本包含较多新特性，例如：

 JEP 189：Shenandoah：一个实验性的低延迟垃圾收集器
 JEP 230：细粒度性能评审套件
 JEP 325：Switch 表达式（预览阶段）
 JEP 334：JVM Constants API
 JEP 340：仅保留一个 AArch64 平台的移植
 JEP 341：默认类数据共享归档
 JEP 344：针对G1，提供可中止的混合垃圾收集
 JEP 346：针对G1，及时释放已申请但未使用的内存

預覽功能 JEP 325 擴充了 switch 語句，使它可以用作表達式，並添加了一種新形式的 case 標籤，其中右側是表達式。
不需要break語句。 對於複雜的表達式，可以使用yield語句。 這在 Java SE 14 中成為了標準。
int ndays = switch(month) {
    case JAN, MAR, MAY, JUL, AUG, OCT, DEC -> 31;
    case APR, JUN, SEP, NOV -> 30;
    case FEB -> {
        if (year % 400 == 0) yield 29;
        else if (year % 100 == 0) yield 28;
        else if (year % 4 == 0) yield 29;
        else yield 28; }
};

 Java 12 更新 
+Java 12 更新表格版本釋出日期重點Java SE 122019-03-19初始版本Java SE 12.0.12019-04-16日本新年號名稱和安全性修補Java SE 12.0.22019-07-16移除功能和設定

 Java SE 13 
JDK 13 於2019年9月17日發佈。該版本包含以下新特性以及很多的強化和很多的漏洞修補。

 JEP-350: 動態 CDS 歸檔
 JEP-351: ZGC: 取消提交未使用記憶體
 JEP-353: 重新實現舊版 Socket API
 JEP-354: Switch 表達式（預覽階段）
 JEP-355: 文字方塊（預覽階段）

JEP 355 文字方塊 允許多行字串文字：
String html = """
              <html lang="en">
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

 Java 13 更新 
+Java 13 更新表格版本釋出日期重點Java SE 132019-09-17初始版本Java SE 13.0.12019-10-15安全性修補和漏洞修補Java SE 13.0.22020-01-14安全性修補和漏洞修補

 Java SE 14 

JDK 14 发布于 2020 年 3 月 17 日。Java 14 包含了下方列出的新功能，以及“数百个小改进和数千个漏洞修复”。

 JEP-305：使用 instanceof 的模式匹配（预览）
 JEP-343：打包工具（孵化中）
 JEP-345：在 G1 中，对不均匀的内存访问（NUMA）情况下的内存申请优化
 JEP-349：JFR Event Streaming
 JEP-352：使字节缓冲区能够映射到非易失性存储器上
 JEP-358：有帮助的 NullPointerExceptions
 JEP-359：记录类（预览）
 JEP-361：Switch 表达式（标准）
 JEP-362：弃用 Solaris 和 SPARC 平台上的移植版本
 JEP-363：移除 Concurrent Mark Sweep (CMS) 垃圾收集器
 JEP-364：适用于 macOS 的 ZGC
 JEP-365：适用于 Windows 的 ZGC
 JEP-366：弃用 ParallelScavenge + SerialOld 的垃圾收集器组合
 JEP-367：移除 Pack200 相关的工具及 API
 JEP-368：文本块（第二预览版本）
 JEP-370：外部内存访问 API（孵化中）

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 14 更新 
+Java 14 更新表格版本釋出日期重點 Java SE 14 2020-03-17 初始版本 Java SE 14.0.1 2020-04-14 安全性修補和漏洞修補 Java SE 14.0.2 2020-07-14 安全性修補和漏洞修補

 Java SE 15 

JDK 15 发布于 2020 年 9 月 15 日。Java 15 增加了对多行字符串字面量（亦称文本块）的支持，此外 Shenandoah 和 ZGC 垃圾收集器也转为生产级别，不再标记为测试中。该版本移除了对 Solaris 操作系统及 SPARC CPU 的支持，还移除了 Nashron JavaScript 引擎，以及一些根 CA 证书。

 JEP 339：爱德华曲线数字签名算法 (EdDSA)
 JEP 360：密封类（预览）
 JEP 371：隐藏类
 JEP 372：移除 Nashorn JavaScript 引擎
 JEP 373：重新实现 DatagramSocket API
 JEP 374：禁用并弃用偏向锁
 JEP 375：使用 instanceof 的模式匹配（第二预览版本）
 JEP 377：ZGC: 可伸缩的低延迟垃圾收集器
 JEP 378：文本块
 JEP 379：Shenandoah: 低暂停时间的垃圾收集器
 JEP 381：移除 Solaris 和 SPARC 平台上的移植版本
 JEP 383：外部内存访问 API（第二孵化版本）
 JEP 384：记录类（第二预览）
 JEP 385：弃用 RMI Activation 以待后续移除

 Java 15 更新 
+Java 15 更新表格版本釋出日期重點 Java SE 15 2020-09-15 初始版本 Java SE 15.0.1 2020-10-20 安全性修補和漏洞修補 Java SE 15.0.2 2021-01-19 安全性修補和漏洞修補

 Java SE 16 

JDK 16 发布于 2021 年 3 月 16 日。Java 16 移除了 AOT 编译及 Graal JIT 的选项。自 Java 16 开始，允许使用 C++14 来编写 Java 的实现（但仍不允许 C++17、C++20 等版本），且代码迁移到了 GitHub，不再使用 Mercurial 版本控制系统。

 JEP 338：Vector API（孵化）
 JEP 347：启用 C++14 语言特性
 JEP 357：从 Mercurial 迁移到 Git
 JEP 369：迁移到 GitHub
 JEP 376：ZGC: 并发的线程栈处理
 JEP 380：用于 Unix 域套接字的 Channel
 JEP 386：Alpine Linux 的移植版本
 JEP 387：可伸缩的 Metaspace
 JEP 388：Windows/AArch64 的移植版本
 JEP 389：外部链接器 API（孵化）
 JEP 390：对值类型的类（Value-based Classes）发出警告
 JEP 392：打包工具
 JEP 393：外部内存访问 API（第三孵化版本）
 JEP 394：使用 instanceof 的模式匹配
 JEP 395：记录类
 JEP 396：在缺省情况下对 JDK 内部进行强封装
 JEP 397：密封类（第二预览版本）

 Java 16 更新 
+Java 16 更新表格版本釋出日期重點 Java SE 16 2021-03-16 初始版本 Java SE 16.0.1 2021-04-20 時區資料庫更新；安全性修補和漏洞修補 Java SE 16.0.2 2021-07-20 安全性修補和漏洞修補

 Java SE 17（LTS） 
JDK 17 发布于2021年9月14日。Java 17是切换到新的6个月发布周期以来的第二个长期支持（LTS）版本（第一个是Java 11）。

 JEP 306：将浮点数的默认语义恢复为严格的
 JEP 356：加强的伪随机数生成器
 JEP 382：新的 macOS 渲染管线
 JEP 391：macOS/AArch64 的移植版本
 JEP 398：弃用 Applet API 以待后续移除
 JEP 403：对 JDK 内部进行强封装
 JEP 406：使用 switch 的模式匹配（预览）
 JEP 407：移除 RMI Activation
 JEP 409：密封类
 JEP 410：移除实验性的 AOT 与 JIT 编译器
 JEP 411：弃用安全管理器以待后续移除
 JEP 412：外部函数与内存 API（预览）
 JEP 414：Vector API（第二孵化版本）
 JEP 415：限定上下文的反序列化过滤器

JEP 406 將 instanceof 操作中使用的模式匹配語法擴展到 switch 語句和表達式。它允許根據參數類型、null case和精簡模式來選擇case
String toString(Object o) {
    return switch (o) {
            case null       -> "Null";
            case String s   -> String.format("字串 %s", s);
            case Long l     -> String.format("長整數 %d", l);
            case Double d   -> String.format("浮點數 %f", d);
            case Integer i && i > 0                            // 精簡模式
                            -> String.format("正整數 %d", i);
            case Integer i && i == 0 
                            -> "零整數 0";
            case Integer i && i < 0 
                            -> String.format("負整數 %d", i);
            default         -> o.toString();
        };
}

 Java 17 更新 
+Java 17 更新表格版本釋出日期重點 Java SE 17 2021-09-14 初始版本 Java SE 17.0.1+12 2021-10-19 移除了 IdenTrust Root Certificate；無法正確識別 Windows 11；透過 JDK 內建 JNDI LDAP 實現控制引用地址對象重建的系統屬性；無法正確識別 Windows Server 2022安全性修補；21 個漏洞修補 Java SE 17.0.2+8 2022-01-18 移除 Google 的 GlobalSign Root Certificate；164 個漏洞修補 Java SE 17.0.3 2022-04-19 新的 XML 處理限制；Only Expose Certificates With Proper Trust Settings as Trusted Certificate Entries in macOS KeychainStore；Restricted Parsing of URL Strings in Built-in JNDI Providers；48 個漏洞修補 Java SE 17.0.4+11 2022-07-19 支援對 Java GSS/Kerberos 的 HTTPS 通道綁定；更新 java.net.InetAddress 以檢測不明確的 IPv4 地址文字；遇到 IOException 時預設 JDK 壓縮器將關閉；計算活動處理器計數時忽略 CPU 份額；60 個漏洞修補 Java SE 17.0.5+9 2022-10-18 停用 SHA-1 簽章 JARs；使 HttpURLConnection 預設保持活動超時可配置；將時區資料更新至 2022c；77 個漏洞修補

 Java SE 18 

JDK 18 发布于 2022 年 3 月 22 日。

 JEP 400：默认使用 UTF-8
 JEP 408：简易 Web 服务器
 JEP 413：Java API 文档中的代码片段
 JEP 416：使用 Method Handle 重新实现核心反射
 JEP 417：Vector API（第三孵化版本）
 JEP 418：因特网地址解析 SPI
 JEP 419：外部函数与内存 API（第二预览版本）
 JEP 420：使用 switch 的模式匹配（第二预览版本）
 JEP 421：弃用 Finalization 以待后续移除

 Java 18 更新 
+Java 18 更新表格版本釋出日期重點 Java SE 18 2022-03-22 初始版本 Java SE 18.0.1 2022-04-19 安全性修補和漏洞修補 Java SE 18.0.1.1 2022-05-06 安全性修補和漏洞修補 Java SE 18.0.2 2022-07-19 安全性修補和漏洞修補 Java SE 18.0.2.1 2022-08-18 Fixes a regression in the C2 JIT compiler

 Java SE 19 

JDK 19 发布于 2022 年 9 月 20 日。

 JEP 405：记录类的模式（预览）
 JEP 422：Linux/RISC-V 的移植版本
 JEP 424：外部函数与内存 API（预览）
 JEP 425：虚拟线程（预览）
 JEP 426：Vector API（第四孵化版本）
 JEP 427：使用 switch 的模式匹配（第三预览版本）
 JEP 428：结构化并发（孵化）

JEP 405 允許記錄類的模式，擴充 instanceof 運算子和 switch 表達式的模式匹配功能，以包含顯式引用記錄組件的記錄類模式。
record Rectangle(int x, int y, int w, int h) {}

int area(Object o) {
    if (o instanceof Rectangle(int x, int y, int w, int h)) {
        return w * h;
    }
    return 0;
}
此類模式可以包括巢狀模式，其中記錄類的組件本身就是記錄類，從而允許模式匹配更多物件圖。

 Java 19 更新 
+Java 19 更新表格版本釋出日期重點 Java SE 19 2022-09-20 初始版本 Java SE 19.0.1 2022-10-18 安全性修補和漏洞修補 Java SE 19.0.2 2023-01-17 安全性修補和漏洞修補

 Java SE 20 

JDK 20 发布于 2023 年 3 月 21 日。

 JEP 429：作用域值（孵化）
 JEP 432：记录类的模式（第二预览版本）
 JEP 433：使用 switch 的模式匹配（第四预览版本）
 JEP 434：外部函数与内存 API（第二预览版本）
 JEP 436：虚拟线程（第二预览版本）
 JEP 437：结构化并发（第二孵化版本）
 JEP 438：Vector API（第五孵化版本）

 Java 20 更新 
+Java 20 更新表格版本釋出日期重點 Java SE 20 2023-03-21 初始版本 Java SE 20.0.1 2023-04-18 漏洞修補 Java SE 20.0.1 2023-04-18 漏洞修補

 Java SE 21（LTS） 

JDK 21 在 2023 年 9 月 19 日发布。與僅預覽和孵化 JEP 的 Java 20 相比，Java 21 有 8 個 JEP 不是處於預覽或孵化狀態。Java 21 正式引入了在 Java 17 和 Java 19 中首次預覽的功能（使用 switch 的模式匹配，和記錄類的模式）。 x86 上的 32 位 Windows 版本已棄用並刪除。

 JEP 430：字串範本（預覽）
 JEP 431：有序的 Collections
 JEP 439：世代 ZGC
 JEP 440：記錄類的模式
 JEP 441：使用 switch 的模式匹配
 JEP 442：外部函数與記憶體 API（第三預覽版本）
 JEP 443：未命名模式和變數（預覽）
 JEP 444：虛擬執行緒
 JEP 445：未命名的類別和實例 main 方法（預覽）
 JEP 446：作用域值（預覽）
 JEP 448：Vector API（第六孵化版本）
 JEP 449：棄用 Windows 32 位 x86 端口以待後續移除
 JEP 451：準備禁止動態加載代理
 JEP 452：密鑰封裝機制 API
 JEP 453：結構化並發（預覽）

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 21 更新 
+Java 21 更新表格版本釋出日期重點 Java SE 21 2023-09-19 初始版本 Java SE 21.0.1 2023-10-17 漏洞修正 Java SE 21.0.2 2024-01-16 漏洞修正

 Java SE 22 

JDK 22 在 2024 年 3 月 19 日發布。

 JEP 423：Region Pinning for G1
 JEP 447：在super()前的語句（預覽）
 JEP 454：外部函數和記憶體API
 JEP 456：未命名模式和變數
 JEP 457：類別檔案API
 JEP 458：啟動多個原始碼檔案程式
 JEP 459：字串範本（第二預覽版本）
 JEP 460：Vector API（第七孵化版本）
 JEP 461：Stream Gatherers（預覽）
 JEP 462：結構化並發（第二預覽版本）
 JEP 463：未命名的類別和實例 main 方法（第二預覽版本）
 JEP 464：作用域值（第二預覽版本）

與 Java 執行緒實作相關的 APIjava.lang.Thread.countStackFrames已被刪除。

 Java SE 23 
Java 23 在 2024 年 9 月 17 日發布，其 JEP 如下：

 JEP 455：模式中的原始類型、instanceof 和 switch（預覽）
 JEP 466：類別檔案 API（第二個預覽版）
 JEP 467：Markdown 文件註釋
 JEP 469：Vector API（第八個孵化器）
 JEP 473：串流收集器（第二預覽版）
 JEP 471：棄用 sun.misc.Unsafe 中的記憶體存取方法並將其刪除
 JEP 474：ZGC：預設的分代模式
 JEP 476：模組導入聲明（預覽）
 JEP 477：隱式宣告的類別和實例主要方法（第三次預覽）
 JEP 480：結構化並發（第三次預覽）
 JEP 481：作用域值（第三次預覽）
 JEP 482：靈活的建構子主體（第二次預覽）

由於功能設計方面的問題，字串模板預覽功能在 Java 23 中被移除。

 Java SE 24 

Java 24 規格於 2024 年 12 月最終確定，其中 24 個 JEP 被納入該版本，並於 2025 年 3 月 18 日發布。

 JEP 404：分代 Shenandoah（實驗性）
 JEP 450：緊湊物件頭（實驗性）（以前稱為Lilliput 專案）
 JEP 472：準備限制 JNI 的使用
 JEP 475：G1 的後期屏障擴展
 JEP 478：金鑰派生函數 API（預覽版）
 JEP 479：刪除 Windows 32 位元 x86 端口
 JEP 483：提前類別載入與連結
 JEP 484：類別檔案 API
 JEP 485：流收集器
 JEP 486：永久停用安全管理器
 JEP 487：作用域值（第四個預覽版）
 JEP 488：模式中的原始類型、instanceof 和 switch（第二個預覽）
 JEP 489：Vector API（第九個孵化器）
 JEP 490：ZGC：刪除非分代模式
 JEP 491：無需固定即可同步虛擬線程
 JEP 492：靈活的建構子主體（第三次預覽）
 JEP 493：不使用 JMOD 連結執行時間映像
 JEP 494：模組導入聲明（第二次預覽）
 JEP 495：簡單原始檔案和實例主要方法（第四個預覽版）
 JEP 496：基於抗量子模組格的金鑰封裝機制
 JEP 497：基於模組格的抗量子數位簽章演算法
 JEP 498：在 sun.misc.Unsafe 中使用記憶體存取方法時發出警告
 JEP 499：結構化並發（第四個預覽版）
 JEP 501：棄用並刪除 32 位元 x86 端口

 Java SE 25（LTS） 
Java 25 在 2025 年 9 月 16 日發布，其 JEP 如下：

 JEP 470：密碼物件 PEM 編碼（預覽）
 JEP 502：穩定值（預覽）
 JEP 503：移除 32 位元 x86 埠
 JEP 505：結構化並發（第五次預覽）
 JEP 506：作用域值
 JEP 507：模式中的原始類型、instanceof 和 switch（第三次預覽）
 JEP 508：Vector API（第十孵化版本）
 JEP 509：JFR CPU-Time Profiling (Experimental)
 JEP 510：金鑰衍生函式 API
 JEP 511：模組匯入宣告
 JEP 512：簡單原始檔案和實例主要方法
 JEP 513：靈活的建構子主體
 JEP 514：Ahead-of-Time Command-Line Ergonomics
 JEP 515：Ahead-of-Time Method Profiling
 JEP 518：JFR Cooperative Sampling
 JEP 519：縮減物件標頭
 JEP 520：JFR 方法測量時間與追蹤
 JEP 521：分代 Shenandoah

 未來功能 
 Valhalla 項目：值類，其物件缺乏身份，但在某些情況下可以獲得改進的記憶體佈局（較少的間接性），或完全優化其分配。
 巴拿馬計畫：
 改進了與本機程式碼的互通性，使 Java 原始程式碼能夠以比現在更簡單且效能更好的方式呼叫其他語言的函數和使用其他語言的資料類型（Project Panama 的這一部分在 Java 22 中的JEP 454：外部函數和記憶體 API下逐漸穩定）。
 Vector API，一個用於SIMD程式設計的可移植且相對低階的抽象層。其穩定性依賴於 Valhalla 項目。
 Lilliput 專案：減少 Java 物件頭的大小。首先減少到 64 位，然後減少到 32 位。
 減少 JIT 模式下的啟動時間和預熱時間（達到峰值效能的時間）：
 CRaC 專案可以對整個 JVM（以及正在運行的應用程式）進行快照，並透過必要的調整（重新開啟檔案、套接字等）進行還原。
 除其他事項外，萊頓專案將允許部分或（長期）全部 AOT 編譯，降低整體動態性（透過採用所謂的「封閉世界約束」）以減少動態編譯開銷。
 Babylon 專案旨在透過增強 Java 語言的反射式程式設計能力（即程式碼反射，即對程式碼本身的反射），將 Java 語言的適用範圍擴展到其他程式設計模型。其主要目標是在 GPU 上執行 Java 程式碼，SQL 和其他程式設計模型則作為次要目標。

 實作 
OpenJDK 是一個自由及開放原始碼軟體實作在Java Platform, Standard Edition (Java SE)。

官方支援的Java 平台是Java SE，它最初由 Sun 開發，現在由 Oracle 管理。發行版基於OpenJDK項目，這是一個具有開放開發模型的免費開源專案。然而，也存在其他 Java 實作 — 部分原因是 Java 早期是專有軟體。相反，一些實現是為了提供優於標準實現的優勢而創建的，這些實現通常是某些學術或公司贊助的研究領域的成果。許多Linux發行版都包含透過Red Hat啟動的IcedTea專案所建構的 OpenJDK ，它提供了更直接的建置和整合環境。

Visual J++和Microsoft Java 虛擬機器最初是作為不相容的實作而創建的。在Sun v. Microsoft案之後，Microsoft 放棄了它，並開始著手開發.NET平台。 2021 年，Microsoft 開始發布與 Java 11 相容的“Microsoft Build of OpenJDK”，之後又陸續發布了與 Java 17 相容的版本。這些版本不僅支援 Windows，還支援 Linux 和macOS。

還有其他專有 Java 實作可用，例如Azul的 Zing。 Azul 在 Zulu 名稱下提供經過認證的開源 OpenJDK 版本。

在 OpenJDK 發布之前，Sun 的實作仍是專有的，而GNU Classpath專案則是為了提供 Java 平台的免費開源實作而創建的。自 JDK 7 發布以來，當 OpenJDK 成為官方參考實作時，GNU Classpath 專案的最初動機幾乎完全消失了，其最後一次發布是在 2012 年。

Apache Harmony專案在 OpenJDK 發布前不久啟動。在 Sun 發布初始原始碼後，Harmony 專案繼續運行，致力於提供基於寬鬆許可證（與OpenJDK 選擇的保護性許可證不同）的實作。谷歌後來開發了Android，並以寬鬆許可證發布。 Android 整合了 Harmony 專案的部分內容，並補充了Google自己的Dalvik 虛擬機器和ART。 Apache Harmony 現已退役，Google已將其 Harmony 元件替換為 OpenJDK 中的等效元件。

Jikes和Jikes RVM都是IBM 開發的開源研究專案。

還有一些其他實作最初是專有軟體，但現在是開源的。 IBM 最初將OpenJ9開發為專有的 J9，但後來重新授權了該專案並將其捐贈給了Eclipse 基金會。 JRockit是專有實現，被 Oracle 收購並納入了後續的 OpenJDK 版本中。

 參考文獻 

 外部連結 
 官方 Java SE 下載
 Java早期版本
 Full list of changes for J2SE 1.3
 Full list of changes for J2SE 1.4
 Full list of changes for J2SE 5.0
 Java SE 7 release notes
 Sun Java Supported versions and EOL
 下載Java舊版本的封存檔

Category:軟體史
Category:Java平台
Category:軟體版本列表