Java 14的新功能
2020年3月17日,Oracle發布了名為Java 14的Java新版本,其中包括許多新功能,工具,安全性,調試和更新的文檔方面的改進。 但是,Oracle還向您提供Java的較舊版本,因為它具有向后兼容性,因此您的先前代碼仍可以在較舊的版本上運行,并且Java 14的語法與Java 8或9并不是完全不同的,它只是新版本對前一個進行了一些改進。
盡管許多開發人員會花很長時間來更新其Java SE或JDK,但始終建議您及時更新您的工具。 但是,新的更新不會為初學者帶來太多的事情,但是更新始終會對大型項目產生影響,大型項目包括具有數千行代碼的太多Java文件。
1.下載Java 14
您可以訪問Java的官方網站下載Java JDK 14,也可以單擊此鏈接; 這也將帶您到下載頁面。
您也可以下載任何Java IDE來編寫新版本Java的代碼。 所有流行的更新Java IDE(例如IntelliJ IDE和Eclipse)都支持Java 14。
2. Java 14的新增功能?
Java 14文檔正式解決了超過15種新的增強或更改,其中包括Java語言支持和JDK的最新API。
2.1開關表達式(JEP 361)
但是,經典的C ++或類似C的Switch語句已經在Java中使用,帶有一些新功能和選項的新switch表達式在Java 12和13中作為預覽引入,但現在我們可以說它是Java 14中的標準。
讓我們看一個例子,我們以前是如何在Java 12之前使用Switch語句的
tags.switch (day) {case 1:System.out.println("Let's meet!");break;case 2:break;case 3:System.out.println("Let's meet!"); break;case 4:break;case 5:System.out.println("Let's meet!");break;case 6: break;case 7:System.out.println("It's Sunday we cannot meet today");break;}Old Switch語句的這種語法存在以下問題:
- 在這里,對于Case 1, Case 3,和Case 5,我們具有相同的行為Case 5,但是我們必須為每個case定義一個特定的case ,這意味著Java switch語句無法提供一種緊湊的方式來編寫類似的行為。
- 對于每個switch case語句,我們必須放置break語句; 如果我們不這樣做,那么代碼將失敗。
2.2 Java 14開關表達式箭頭運算符
在Java 14中,我們為Switch語句提供了一種新的語法,稱為Switch Expression,在這里,我們獲得了一個新的運算符Arrow -> ,它有助于消除break語句,并為switch Expression提供了簡潔明了的外觀。
Arrow運算符的語法:
case identifier -> statement;要么
case identifier -> {// statement block ;}Java 14的開關表達式(箭頭運算符)
讓我們用新的Java 14 Switch Expression重寫上面的Switch語句:
switch (day) {case 1, 3, 5 -> System.out.println("Let's meet!");case 2, 4, 6 -> {// Do nothing}case 7 -> System.out.println("It’s Sunday we cannot meet today");default -> "Not valid";}在這里您可以看到,借助Java 14箭頭運算符,我們消除了break語句,并且在此處使用單行,針對不同情況傳遞了類似的行為。
2.3 Java 14開關表達式yield運算符
在Java 14中,switch語句具有稱為yield的關鍵字,該關鍵字充當case語句表達式的return關鍵字,而switch語句的此功能使其成為Java 14中的switch表達式:
產生語法:
case -> {yield value;}Java 14的開關表達式(yield語句):
String message = switch (day) {case 1, 3, 5 -> "Let's meet!";case 2, 4, 6 -> {yield "No meeting today";}case 7 -> {yield "It's Sunday we cannot meet today"; }default -> "Not valid"; };在這里, switch語句將產生一個值,并且該值將存儲在message. 我們應該始終覆蓋switch語句的可能值,為此,switch表達式應始終具有覆蓋非法情況的default語句。
2.4文字區塊(JEP,368):
這是Java 14中的一項新功能。 但是,它的預覽已經在Java 13中引入。在舊版本的Java中,當我們有一個長字符串,并且想要在字符串之間放置換行符時,我們必須使用“ \n ”換行符轉義,并且寫一個長字符串也不好看。 Java 14提供了一種替代的方式,可以使用緊湊型內核在多行中寫入字符串。
帶有字符串的Java舊版本:
String old_java = " This is first line\n" + "This is second line" + "and this is third line\n";Java 14文本塊:
要在Java中編寫長的多行字符串,我們使用Text塊,該字符串以3個雙反引號""" """駐留。
例:
String new_java = """This is the first lineThis is Second Lineand this is the third line""";在這里,您在字符之間輸入的每個空格和換行符也將顯示在輸出中。
2.5例如Java 14模式匹配(JEP 305)
Java的較早版本中已經存在instanceof語句,但是Java 14提供了一種技術,我們可以使用單行而不是多行將字符串對象類型轉換為另一個字符串變量。
使用instanceof進行類型轉換的Java舊版本:
Object object_string = "It is a string, but is treated as an object...";if (object_string instanceof String) {String stringObject = (String) object_string;System.out.println(stringObject.length()); }Java 14
Object object_string = "It is a string but it treated as an object...";if (object_string instanceof String stringObject) {System.out.println(stringObject.length()) }現在,我們無需為類型轉換顯式編寫額外的語句; Java 14中instanceof語句的增強可以在一行內同時鍵入新變量的收斂。
2.6記錄(JEP,359):
在Java 14中,這是一種預覽模式,我們可以期望在Java 15中使用完整的標準格式。假設我們想創建某種方式來表示Student詳細信息,為此,我們可以創建一個Student類,其中包含一些數據變量,例如Name, age,和grades.
class Student {public final String name, grades;public final int age; }但是這里我們不需要getter和setter。 相反,我們將創建一個構造函數。 創建一個構造函數是一個好習慣,在它的幫助下,我們還可以判斷兩個Student對象是否引用同一個Student。
class Student {public final String name, grades;public final int age;public Student(String name, int age, String grades){this.name = name;this.age = age;this.grades = grades;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return Objects.equal(student.name, name) == 0 &&Objects.equal(student.grades, grades) == 0 &&Integer.compare(age, student.age);}@Overridepublic int hashCode() {return Objects.hash(name, age, grades);}@Overridepublic String toString() {return "Student{" +"name=" + latitude +", age" + longitude +", grades='" + grades + '\'' +'}';}在上面的代碼中,我們主要關注學生的詳細信息,即name, age,和grades,但是我們覆蓋了諸如構造函數,哈希碼,equals和toString之類的方法,但是Java 14提供了可以解析的預覽功能record這種樣板。
record Student(String name, int age, String grades){}此處,構造函數,哈希碼,equals和toString將由編譯器生成,您可以節省很多不必要的代碼重寫。
2.7有用的NullPointer異常(JEP 358)
它是Java 14中已添加的一項新功能。Java虛擬機引發一個異常,稱為NullPointerException(NPE),當代碼嘗試取消引用空引用時,會發生此異常,并且它是其中的一種。 Java中最常見的異常。
obj.sec_obj.val = 10;例外:
Exception in thread "main" java.lang.NullPointerExceptionat Npe.main(Npe.java:17)該示例是在較舊版本的Java上編譯的,在這里您可以看到錯誤消息未提供引用為null的任何特定信息,它可以是obj或obj.sec_obj 。
但是Java 14解決了這個問題,并提供了更好的錯誤消息來調試此語句。
tags.obj.sec_obj.val = 10;輸出:
Exception in thread "main" java.lang.NullPointerException:Cannot read field "val" because "obj.sec_obj" is nullat Npe.main(Npe.java:17)現在有了新的異常信息,我們可以直接訪問代碼的sec_obj部分并調試問題。
3.結論
這是Java 14的一些重要新功能,如果您是Java開發人員,則可以在軍械庫中添加這些功能,其中一些功能已在Java 14中進行了預覽,并且某些功能已正確實現。 Java開發人員社區仍在進行升級,下一個更新中還有許多其他更改。 除了這些功能之外,Java 14還引入了許多其他新功能。建議您轉到官方文檔。 Java JEP并閱讀所有官方更新。
4.下載源代碼
下載您可以在此處下載本文的完整源代碼: Java 14功能
翻譯自: https://www.javacodegeeks.com/java-14-new-features.html
總結
以上是生活随笔為你收集整理的Java 14的新功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 索爱x8刷机教程(索爱手机刷机教程)
- 下一篇: java ssh客户端_简单的Java