之前的JAVA是這樣:
Java 21會是這樣:
看到這個消息,我最大的感受是:
臥槽,怎么就Java 21了?!我還在用Java 8 呢!
實際上,從Java 8 到Java 21,中間也就是Java 11, Java 17是長期支持版本,其他的都是“小”版本,變化不大。
這次去掉“public static void mAIn”的提案來自JEP 445: Unnamed Classes and Instance Main Methods。
長期以來,關于Java的抱怨是“太冗長”,“太多儀式感”,Java把這種儀式感強加給了所有首次學習它的人。
對于類的聲明和public static void main,每個新手都覺得是難以理解的咒語,它們成為了學習道路上的巨大障礙。
有個可愛的美國老師居然創作了一首RAP來幫助新手記憶“public static void main”!
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
對于新手來說,這簡單的五行代碼說,信息嚴重過載了:
(1) 類上的public
它只有在跨越package訪問時才有意義,為什么一個簡單的Hello World都必須把它寫上?
(2) class
新手只想寫個hello world ,他們還必須理解什么叫類嗎?
(3) 方法上的public
這是什么鬼?為什么要加個public
(4) static
新手根本理解不了什么靜態方法,為什么需要靜態方法。
(5) String[] args
這個參數的定義,對于新手來說也是一團霧水
(6) System.out.println(...)
System是個類,out是個靜態字段,println是實例方法,學生們唯一關心的是println啊。
在上課的第一天就需要解釋很多東西,快下課了,學生也寫不出任何程序,老師只好說:先記住吧,以后你會明白的。
所以Brian Goetz認為,必須要簡化這一切。
第一步使用更寬容的“啟動協議”,可以改成這樣:
class HelloWorld {
void main() {
System.out.println("Hello World");
}
}
第二步通過引入“未命名的類”,改成這樣:
void main() {
System.out.println("Hello World");
}
第三步,“自動導入靜態方法”,改成這樣:
void main() {
println("Hello World");
}
看起來更加清晰明了,對于Java初學者將會非常友好。
但是真正到了JEP當中, System.out.println還是被保留了,不知道為什么。
對于這個變化,網友們炸鍋了,有人說:Hey, 你忘記了一個東西:Script
還有人說,以后Java的logo應該變成這樣:
需要提醒各位的是,這是個預覽功能,在JDK中默認是禁用的,主要是為了降低在教Java時的認知負擔。
經過這二十多年的發展,圍繞Java建立了龐大的生態,各種各樣的軟件應有盡有,讓Java極其成功的同時,也讓Java背上了沉重的包袱,要想簡化成Python/ target=_blank class=infotextkey>Python,JS那樣的腳本語言,幾乎不可能了,這次能夠邁出一小步已經是難能可貴了。
參考資料:
https://openjdk.org/projects/amber/design-notes/on-ramp
https://openjdk.org/jeps/445