Java版本功能差異一覽指南 - marcobehler
您可以使用本指南獲取有關如何查詢和安裝最新Java的實用資訊、Java語言功能的概述,包括Java版本8-13。
瞭解Java發行版之間的差異(AdoptOpenJdk,OpenJDK,OracleJDK等):Java版本安裝完整指南
基本上,所有 Java 8語言功能(現在不要挑剔)也可以在Java 13中使用。兩者之間的所有其他Java版本也是如此。
反過來,這意味著Java 8的所有語言功能都可以作為非常好的Java基礎知識,而其他所有功能(Java 9-13)則是在該基線之上的許多附加功能。
以下是特定版本所提供內容的快速概述:
-Java 8-
Java 8是一個巨大的版本,您可以在Oracle網站上找到所有功能的列表。不過,我想在此提及兩個主要功能:
1. 語言功能:Lambdas等
在Java 8之前,無論何時要例項化(例如)新的Runnable,都必須編寫一個匿名內部類,如下所示:
Runnable runnable = new Runnable(){ @Override public void run(){ System.out.println("Hello world !"); } }; |
對於lambda,相同的程式碼如下所示:
Runnable runnable = () -> System.out.println("Hello world two!"); |
您還獲得了方法參考,重複註釋,介面的預設方法以及其他一些語言功能。
2.集合和流
在Java 8中,您還獲得了集合的函式式操作,也稱為Stream API。一個簡單的例子:
List<String> list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd"); |
現在,在Java 8之前的版本中,您基本上必須編寫for迴圈才能對該列表進行處理。
使用Streams API,您可以執行以下操作:
list.stream() .filter(name -> name.startsWith("f")) .map(String::toUpperCase) .sorted() .forEach(System.out::println); |
-Java 9-
Java 9也是一個相當大的發行版,其中增加了一些功能:
1.Collections
集合有幾個新的幫助器方法,可以輕鬆地構造列表,集合和map。
List<String> list = List.of("one", "two", "three"); Set<String> set = Set.of("one", "two", "three"); Map<String, String> map = Map.of("foo", "one", "bar", "two"); |
2.stream
Streams以takeWhile,dropWhile,iterate方法的形式新增了一些附加功能。
Stream<String> stream = Stream.iterate("", s -> s + "s") .takeWhile(s -> s.length() < 10); |
3. Optionals
Optionals有了ifPresentOrElse方法。
user.ifPresentOrElse(this::displayAccount, this::displayLogin); |
4.Interfaces
介面提供私有方法:
public interface MyInterface { private static void myPrivateMethod(){ System.out.println("Yay, I am private!"); } } |
其他語言特性:還有其他一些改進,例如改進的try-with-resources語句或菱形運算子擴充套件。
5. jshell
Java提供了一個Shell,您可以在其中試用簡單的命令並立即獲得結果。
% jshell | Welcome to JShell -- Version 9 | For an introduction type: /help intro jshell> int x = 10 x ==> 10 |
6.HTTP客戶端
Java 9帶來了新HttpClient的初始預覽版。直到那時,Java的內建Http支援還只是底層的,您不得不依靠第三方庫,例如Apache HttpClient或OkHttp(它們是很棒的庫,btw!)。
使用Java 9,Java有了自己的現代客戶端-儘管處於預覽模式,這意味著在更高版本的Java中可能會有所更改。
7.模組專案:Java模組和多版本jar檔案
Java 9獲得了Jigsaw Module System,它在某種程度上類似於舊的OSGI規範。深入瞭解Jigsaw不在本指南的範圍內,但是請檢視以前的連結以瞭解更多資訊。
多版本.jar檔案使一個.jar檔案成為可能,其中包含針對不同JVM版本的不同類。因此,例如,在Java 8與Java 10上執行時,您的程式可以表現不同/具有不同的類。
-Java 10-
Java 10進行了一些更改,例如Garbage Collection等。但是,作為開發人員,您唯一可能真正看到的更改就是引入了“ var”關鍵字,也稱為區域性變數型別推斷。
區域性變數型別推斷:var-keyword:
// Pre-Java 10 String myName = "Marco"; // With Java 10 var myName = "Marco" |
-Java 11-
從開發人員的角度來看,Java 11的發行版也較小。
1.字串和檔案
字串和檔案有一些新方法(此處未列出所有方法):
"Marco".isBlank(); "Mar\nco".lines(); "Marco ".strip(); Path path = Files.writeString(Files.createTempFile("helloworld", ".txt"), "Hi, my name is!"); String s = Files.readString(path); |
2.執行原始檔
從Java 10開始,您可以直接執行Java原始檔,而無需先對其進行編譯。邁向指令碼編寫的一步。
java MyScript.java |
3. Lambda引數的區域性變數型別推斷(var)
(var firstName, var lastName) -> firstName + lastName |
4.HttpClient
來自Java 9的HttpClient的最終非預覽版本。
5.飛行記錄器,無操作垃圾收集器,已棄用Nashorn-Javascript-Engine等
-Java 12-
Java 12有一些新功能和清理功能,但是這裡唯一值得一提的是Unicode 11支援和新開關表示式的預覽,您將在下一節中看到。
-Java 13-
您可以在此處找到完整的功能列表,但實際上,您將獲得Unicode 12.1支援,以及兩個新的或改進的預覽功能(將來可能會更改):
1.switch表示式
現在可以返回一個值。而且,您可以對錶達式使用lambda樣式的語法,而不會出現直通/突破問題:
舊的switch語句如下所示:
switch(status) {
case SUBSCRIBER:
// code block
break;
case FREE_TRIAL:
// code block
break;
default:
// code block
}
在Java 13中,switch語句如下所示:
boolean result = switch (status) { case SUBSCRIBER -> true; case FREE_TRIAL -> false; default -> throw new IllegalArgumentException("something is murky!"); }; |
2.多行字串
可以在Java中執行此操作:
String htmlBeforeJava13 = "<html>\n" + " <body>\n" + " <p>Hello, world</p>\n" + " </body>\n" + "</html> String htmlWithJava13 = """ <html> <body> <p>Hello, world</p> </body> </html> |
相關文章
- Java 8-13版本功能差異一覽指南 - marcobehlerJava
- Java版本安裝完整指南 - marcobehlerJava
- XML DOM 瀏覽器差異概述XML瀏覽器
- Spring事務管理:非常規指南 - marcobehlerSpring
- 20190312_淺談go&java差異(一)GoJava
- Java 12版本完整指南新功能 | Henn IdanJava
- Dash 2.9.0版本重磅新功能一覽
- SQL Server 2017 各版本之間的差異SQLServer
- Hanlp1.7版本的新增功能一覽HanLP
- 線上json差異比較工具--遞迴比較兩個json的節點和值的差異,並支援差異數預覽和逐個檢視差異JSON遞迴
- 瀏覽器極速模式和相容模式差異瀏覽器模式
- Scala與Java差異(三)之函式Java函式
- Three.js 新舊版本建立幾何物件差異JS物件
- mpp 資料庫greenplum官方商業版本與開源版本的差異資料庫
- 從原始碼分析JSONObject因版本差異導致toString格式異常問題原始碼JSONObject
- Scala與Java差異(五)之Map與TupleJava
- 從資料庫開源商業版本差異談起資料庫
- Kibana功能一覽
- java 如何從零實現一個資料庫差異對比工具?Java資料庫
- java比較mysql兩個資料庫中差異JavaMySql資料庫
- Oracle與GreatSQL差異:更改唯一索引列OracleSQL索引
- list對比差異
- 如何在Java中使用檔案操作API: java.nio.file.Path?- marcobehlerJavaAPI
- java安全編碼指南之:異常處理Java
- 關於HTTP /1.1 與 /2.0版本的常見差異和特性HTTP
- Hybris Administration console功能一覽
- Scala與Java差異(二)之條件控制與迴圈Java
- IRequiresSessionState和IReadOnlySessionState應用上的一些差異UISession
- Kotlin 1.1.6版本更新,新功能搶先預覽Kotlin
- 思科1500與3600差異
- UDP和TCP的差異UDPTCP
- java字串“==”與“equals”的差異及與c#的區別Java字串C#
- Python網頁應用開發神器fac 0.2.6版本重要新功能一覽Python網頁
- DolphinScheduler 3.3.0版本更新一覽
- 用canvas實現一個自動識別兩張圖片差異(圖片找不同)的功能Canvas
- rpm 與 原始碼安裝的一些差異原始碼
- Java跨平臺?慎用這些有平臺差異性的方法Java
- exists()、not exists() 、in()、not in()用法以及效率差異