如果你是一位苦逼的 Java 程序員,那么當(dāng)你看到這張圖的時(shí)候也許震驚的會(huì)跳起來(lái)!
但是我最大的感受是:
臥槽,怎么就Java 21了?!我還在用Java 8 呢!
實(shí)際上,從Java 8 到Java 21,中間也就是Java 11, Java 17是長(zhǎng)期支持版本,其他的都是“小”版本,變化不大。
這次去掉“public static void main”的提案來(lái)自JEP 445: Unnamed Classes and Instance Main Methods (Preview) ;翻譯過(guò)來(lái)是 “未命名類和實(shí)例 main 方法”,僅看標(biāo)題你可能并不認(rèn)為和上面那些東西有什么關(guān)系,但事實(shí)上,上述特性確實(shí)是由此 JEP 帶來(lái)的。
這種簡(jiǎn)化寫(xiě)法并不是 Java 的特例,其實(shí)早在 .NET 6,C# 就引入了一套 "控制臺(tái)模板" 語(yǔ)法,其允許你在 C# 的主類文件(這里是 Program.cs)這么寫(xiě):
//Seehttps://aka.ms/new-console-templateformoreinformation Console.WriteLine("Hello,World!");
其等價(jià)于:
usingSystem; namespaceMyApp//Note:actualnamespacedependsontheprojectname. { internalclassProgram { staticvoidMain(string[]args) { Console.WriteLine("HelloWorld!"); } } }
很神奇對(duì)不對(duì),但實(shí)際上說(shuō)簡(jiǎn)單點(diǎn)這只是套語(yǔ)法糖而已。那么,JEP 445 也是如此嗎?答案是否定的,甚至,它連語(yǔ)法糖都沒(méi)有引入 。
基于 Spring Boot + MyBatis Plus + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
項(xiàng)目地址:https://github.com/YunaiV/ruoyi-vue-pro
視頻教程:https://doc.iocoder.cn/video/
真的是變天了嗎?
如果你仔細(xì)查看 JEP 提案的原文,你會(huì)發(fā)現(xiàn)他們?cè)?Summary 和 Goal 上提到最多的兩個(gè)詞是:sutdents 和 beginners:
而仔細(xì)讀讀這部分內(nèi)容你會(huì)知道,這個(gè) JEP 設(shè)立的初衷是為了為學(xué)生和 Java 新手隱去晦澀難懂的部分,僅保留一些簡(jiǎn)單的語(yǔ)法,方便他們快速入門和學(xué)習(xí) Java,但并不是引入了一套額外的 Java 方言 。
從始至終,這套東西就不是給普通 Java 開(kāi)發(fā)者使用的,而是面向?qū)W生和新手入門使用的。
有個(gè)可愛(ài)的美國(guó)老師居然創(chuàng)作了一首R(shí)AP來(lái)幫助新手記憶“public static void main”!
publicclassHelloWorld{ publicstaticvoidmain(String[]args){ System.out.println("HelloWorld"); } }
對(duì)于新手來(lái)說(shuō),這簡(jiǎn)單的五行代碼說(shuō),信息嚴(yán)重過(guò)載了:
(1) 類上的public
它只有在跨越package訪問(wèn)時(shí)才有意義,為什么一個(gè)簡(jiǎn)單的Hello World都必須把它寫(xiě)上?
(2) class
新手只想寫(xiě)個(gè)hello world ,他們還必須理解什么叫類嗎?
(3) 方法上的public
這是什么鬼?為什么要加個(gè)public
(4) static
新手根本理解不了什么靜態(tài)方法,為什么需要靜態(tài)方法。
(5) String[] args
這個(gè)參數(shù)的定義,對(duì)于新手來(lái)說(shuō)也是一團(tuán)霧水
(6) System.out.println(...)
System是個(gè)類,out是個(gè)靜態(tài)字段,println是實(shí)例方法,學(xué)生們唯一關(guān)心的是println啊。
在上課的第一天就需要解釋很多東西,快下課了,學(xué)生也寫(xiě)不出任何程序,老師只好說(shuō):先記住吧,以后你會(huì)明白的。
所以Brian Goetz認(rèn)為,必須要簡(jiǎn)化這一切。
第一步使用更寬容的“啟動(dòng)協(xié)議”,可以改成這樣:
classHelloWorld{ voidmain(){ System.out.println("HelloWorld"); } }
第二步通過(guò)引入“未命名的類”,改成這樣:
voidmain(){ System.out.println("HelloWorld"); }
第三步,“自動(dòng)導(dǎo)入靜態(tài)方法”,改成這樣:
voidmain(){ println("HelloWorld"); }
看起來(lái)更加清晰明了,對(duì)于Java初學(xué)者將會(huì)非常友好。
經(jīng)過(guò)這二十多年的發(fā)展,圍繞Java建立了龐大的生態(tài),各種各樣的軟件應(yīng)有盡有,讓Java極其成功的同時(shí),也讓Java背上了沉重的包袱,要想簡(jiǎn)化成Python,JS那樣的腳本語(yǔ)言,幾乎不可能了,這次能夠邁出一小步已經(jīng)是難能可貴了。
基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 實(shí)現(xiàn)的后臺(tái)管理系統(tǒng) + 用戶小程序,支持 RBAC 動(dòng)態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
責(zé)任編輯:彭菁
-
JAVA
+關(guān)注
關(guān)注
19文章
2966瀏覽量
104702 -
RBAC
+關(guān)注
關(guān)注
0文章
44瀏覽量
9962 -
開(kāi)發(fā)者
+關(guān)注
關(guān)注
1文章
563瀏覽量
17005
原文標(biāo)題:Java21的 main 方法聲明要變天了嗎?
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論