1. 概述
在 Java 的最新版本中,Oracle 團隊一直致力於讓新手程式設計師更容易使用 Java 語言。作為其中的一部分,Oracle 團隊引入了隱式類別和實例主方法作為預覽功能,這將消除使用典型新手程式設計師不熟悉的建構的需要。
**在 Java 23 中,Oracle 團隊對隱式類別和實例主方法提出了一些增強功能,這將進一步簡化新手程式設計師的學習曲線。**在本文中,我們將簡要討論 JDK 23 中的隱式類別、實例主方法以及新提出的增強功能。
2.JDK 23之前
隱式類別(或未命名類別)和實例 main 方法最初作為預覽功能在 Java 21 中引入。
傳統上,Java 要求開發人員明確定義類別來封裝成員變數和方法。這可能很麻煩,尤其是當我們編寫具有簡單邏輯的小程式時。
開發人員還必須使用 static 關鍵字和方法參數聲明 main 方法,作為應用程式的入口點。這些構造經常讓初學者程式設計師感到困惑並限製成員變數的可見性。
隨著隱式類別的引入,開發人員現在無需類別聲明即可編寫程式碼。編譯器會在背景自動產生類,以便開發人員可以專注於程式碼的核心邏輯。
實例主方法功能允許開發人員在類別實例中定義主方法。這意味著開發人員現在可以直接存取實例變數和方法,這將允許我們在main方法中編寫更複雜的程式碼。
此外,它不要求方法是static或具有String[]參數,這使得初學者很容易上手。
3. Java 23 中的增強
Java 23 中提出了新的增強功能,以使該語言更適合初學者。讓我們在本節中簡要地了解它們。
3.1.與控制台交互
許多初學者程式設計師通常希望編寫涉及與控制台互動的程序,例如在控制台上編寫文字並獲取控制台輸入。然而,要做到這一點,他們需要寫出對初學者來說很神秘的複雜句子。
例如,像從用戶那裡獲取輸入並顯示它一樣簡單的程式碼需要我們編寫以下程式碼:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Please enter your name: ");
String name = reader.readLine();
System.out.println("Hello " + name);
} catch (IOException ioe) {
System.err.println("An error occurred while reading input: " + ioe.getMessage());
}
}
}
上面的程式碼對於初學者來說看起來很神秘,並且可能會導致許多問題,例如什麼是BufferedReader和InputStreamReader ?什麼是try 、 catch ?什麼是IOException ?
透過建議的增強功能,我們可以在每個隱式類別的主體中輕鬆使用以下方法:
public static void println(Object object);
public static void print(Object obj);
public static String readln(String prompt);
為了實現這一點,Java 在java.io套件中引入了一個名為IO新頂層類別。它聲明了上述三個用於控制台文字 I/O 的static方法,僅此而已。每個隱式宣告的類別都會自動匯入這些static方法,就好像包含以下宣告一樣:
import static java.io.IO.*;
新類別java.io.IO是 JDK 23 中的預覽 API。
有了這個,我們就可以把上面的程式碼寫得更簡潔了:
void main() {
String name = readln("Please enter your name: ");
print("Hello "+name);
}
要運行上面的程式碼,我們需要透過啟用預覽標誌來編譯並執行程式。為此,請轉到來源檔案所在的目錄,然後執行兩個命令:
javac --source 23 --enable-preview .\Test.java
java --source 23 --enable-preview Test
3.2.自動導入java.base模組
為了用 Java 編寫任何有意義的程式碼,我們需要將其他套件匯入到我們的程式碼中。然而,對於初學者來說,這些 import 語句看起來很奇怪,並且可能是另一個混亂的根源。
新的建議是透過使java.base模組導出的套件的所有公共頂級類別和介面可在每個隱式類別的主體中使用來進一步簡化程式碼。
這將允許程式設計師使用這些類別/接口,而無需明確導入語句。這些類別將根據需要隱式導入。因此, java.io 、 java.math和java.util等常用套件中的流行 API 可以立即使用,無需任何麻煩。
早些時候,Oracle團隊提出了一種新的導入聲明,格式為“ import module M,它按需導入模組M導出的包的所有公共頂級類別和介面。
隱式宣告的類別隱式導入java.base模組,就好像聲明import module java.base出現在包含隱式類別的每個來源檔案的開頭一樣。
4. 結論
我們已經看到隱式類別和實例主方法如何顯著改善初學者程式設計師的體驗,同時也為經驗豐富的程式設計師增加價值,讓他們現在可以編寫更清晰、更易讀的程式碼。
與往常一樣,範例的原始程式碼可以在 GitHub 上找到。