JDK 1.0(1996)
Sun公司發佈Java1.0,發佈初期叫Oak,後改名爲Java(JDK1.0基本上只支持Java語言基礎特性)
JDK 1.1(1997)
- 引入內部類
- 引入JDBC: 是Java語言中用來規範客戶端程序如何來訪問數據庫的應用程序接口,提供了諸如查詢和更新數據庫中數據的方法。JDBC也是Sun Microsystems的商標。JDBC是面向關係型數據庫的。
- 引入RMI:Java中一種特殊的類,可以將多個對象封裝到一個對象(bean)中。特點是可序列化,提供無參構造器,提供getter方法和setter方法訪問對象的屬性。名稱中的“Bean”是用於Java的可重用軟件組件的慣用叫法。
- 引入JavaBeans:Java中一種特殊的類,可以將多個對象封裝到一個對象(bean)中。特點是可序列化,提供無參構造器,提供getter方法和setter方法訪問對象的屬性。名稱中的“Bean”是用於Java的可重用軟件組件的慣用叫法。
- 支持反射能力
- 支持國際化和Unicode
J2SE 1.2(1998)
- Java技術體系拆分爲:J2SE、J2EE、J2ME
- 引入JIT:即時編譯,又譯及時編譯、實時編譯,動態編譯的一種形式,是一種提高程序運行效率的方法。通常,程序有兩種運行方式:靜態編譯與動態直譯。靜態編譯的程序在執行前全部被翻譯爲機器碼,而直譯執行的則是一句一句邊運行邊翻譯。
- 引入EJB技術
- 引入Swing圖像化API
- Java plug-in(Java Applet):Web環境下的小程序
- 引入集合框架
J2SE 1.3(2000)
- 初次引入 HotSpot VM
- Java命名和目錄接口(Java Naming and Directory Interface,縮寫JNDI)包含在主程序庫中(先前爲擴展組件的形式)
- 用於實現動態代理的類
J2SE 1.4(2002)
- 語言上的改變:assert 關鍵字(斷言)
- 正則表達式
- 異常鏈,允許一個異常來封裝原先處於較低級別的異常
- 支持 Internet Protocol version 6(IPv6)
- 非阻塞I/O(NIO)
- 新增 日誌API
J2SE 5.0(2004)
- 泛型: 爲集合提供編譯期間 (靜態) 類型安全,且不須爲大多數類型轉換 (類型轉換) (規範在 JSR 14)
- 元數據(MetaData): 也稱作註解。讓語言結構(像是類別和方法)能夠用額外的數據標記,可以由元數據意識工具處理(規範在 JSR 175)
- 枚舉
- 自動裝箱拆箱:基本數據類型如int與Integer之間能夠自動轉換
- 靜態導入(import static)
- 可變參數
- JUC
- For-Each 循環
- Scanner 類別來解析來自各式各樣的輸入和緩衝
public class Jdk5Demo{
public static void mian(String[] args){
String[] values = of("hello","world");
Integer[] data = of(1,2,3,4,5);
}
private static <T> T[] of(T... values){
return values;
}
private static <T> T[] ofOne(T one, T... others){
return others;
}
}
JavaSE 6(2006)
- 引入垃圾回收G1
- 優化鎖與同步、垃圾收集、類加載等
- @Override 接口
public class Jdk6Demo extends Object{
public static void mian(String[] args){
}
@Override
public String toString(){
return super.toString();
}
public interface EchoService{
@Deprecated(since = "1.1")
String echo(String message);
String echo(String message,String... others);
}
public class EchoServiceImpl implements EchoService{
//1.1 remove @Override
String echo(String message){
return null;
}
@Override
String echo(String message,String... others){
return null;
}
}
}
//@Override 正常來說要作爲重寫的註解加在重寫的方法上,但有時候就爲了區分版本 如上就是從1.1版本要刪除了就不應該在加上該註解
JavaSE 7(2011)
sun被Oracle收購
- 鑽石語法(泛型實例化類型自動推斷)
- try-with-resources語法糖
- 多個catch塊用|連接
- switch中可以使用字符串
- 支持動態語言
- 64位JDK的指針壓縮
- 數值可加下劃線
public class Jdk7Demo {
public static void mian(String[] args){
try(FileInputStream inputStream = new FileInputStream("D:/a.txt")){
//AutoCloseable since 1.7
//JDBC Connection ,InputStream,用 try-with-resources的語法
}catch(FileNotFoundException | RuntimeException e ){
e.printStackTrace();
}
}
}
JavaSE 8(2014 LTS)
- Lambda表達式(閉包,允許我們將函數當成參數傳遞給某個方法)
- 接口中的默認方法和靜態方法
- 方法引用
- 無參構造器方法引用:類名::new 或者 Class::new
- 靜態方法引用:Class::static_method (接受一個Class類型參數)
- 類成員方法引用:Class::method (沒有參數)
- 實例成員方法引用:instance::method (接受一個instance對應類型的參數)
- 重複註解(同一個地方可以重複使用多次同一個註解,註解本身需要被@Repeatable修飾)
- 升級工具庫實現
- HashMap實現修改、ConCurrentHashMap實現修改
- 新增Stream API(java.util.stream)
- 新增Optional類以解決空指針問題
- 工具包,類依賴分析工具 jdeps
- JVM方面:使用Metaspace(JEP122)代替方法區持久帶(PermGen space)
JavaSE 9(2017)
JSR 376:在Jigsaw項目中將JDK模塊化(參見Java平臺模塊系統條目)
JEP 222:jshell:Java Shell(一個 Java 交互式頂層構件)
JEP 295:AOT編譯(通過 Graal VM 實現)[240]
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圖像:自動縮放與尺寸自適應。
JavaSE 10 (2018.3)
JEP 286:局部變量類型推斷
JEP 317:實驗性的基於Java的JIT編譯器。這是 Linux x64 下 Graal 動態編譯器的集成。
JEP 310:應用程序類級別數據共享
JEP 322:基於時間的版本命名
JEP 307:適用於G1的多線程完全垃圾回收
JEP 304:垃圾回收器接口
JEP 314:更多的Unicode語言標籤擴展
JEP 319:內置根證書
JEP 312:線程本地握手
JEP 316:在可選的內存設備上申請堆內存空間
JEP 313:刪除本地代碼頭文件生成器javah
JEP 296:將所有JDK分支集成到同一個版本庫中
var a = new ArrayList<>();
JavaSE 11 (2018.9 LTS)
JEP 309:動態類文件常量
JEP 318:Epsilon:無操作垃圾收集器
JEP 323:lambda參數的局部變量語法
JEP 331:低開銷堆分析
JEP 321:HTTP Client
JEP 332:支持 TLS 1.3
JEP 328:添加Java飛行記錄器(JFR),其用於創建性能分析記錄
JEP 333:添加ZGC(一個可擴展的低延遲垃圾收集器)
JavaFX、Java EE、CORBA 被移出 JDK
JEP 335:棄用 Nashorn JavaScript 引擎
JavaSE 12(2019.3)
JEP 189:Shenandoah:一個實驗性的低延遲垃圾收集器
JEP 230:細粒度性能評審包
JEP 325:Switch 表達式(預覽階段)
JEP 334:JVM Constants API
JEP 340:僅保留一個 AArch64 平臺的移植
JEP 341:默認類數據共享歸檔
JEP 344:針對G1,提供可中止的混合垃圾收集
JEP 346:針對G1,及時釋放已申請但未使用的內存
Java類庫提升
Java5 | Java6 | Java7 | Java8 | Java9 | Java10 |
---|---|---|---|---|---|
併發框架(J.U.C) | JDBC 4.0 | NIO 2 | Stream API | Reactive Streams Flow API | Java-Based JIT Compiler |
格式化(Fomatter) | JAXB 2.0 | Fork/Join框架 | CompletableFuture | Process API Updates | |
Java管理擴展(JMX) | 可插拔註解處理AP | Iinvokedynamic字節碼 | Annotation on Java Types | Variable Handles | |
Instrumentation | Common Annotations | Date and Time API | Method Handles | ||
XML處理(DOM、SAX、XPath、XSTL) | Java Compiler Api | 可複製Annotations | Spin-Wait Hints | ||
Scripting in JVM | JavaScript運行時 | Stack-Walking API |
參考百科:維基百科