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