⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 网络 「网络」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注**微信公众号:【芋道源码】**有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

如果你是一位苦逼的 Java 程序员,那么当你看到这张图的时候也许震惊的会跳起来!

但是我最大的感受是:

卧槽,怎么就Java 21了?!我还在用Java 8 呢!

实际上,从Java 8 到Java 21,中间也就是Java 11, Java 17是长期支持版本,其他的都是“小”版本,变化不大。

这次去掉“public static void main”的提案来自JEP 445: Unnamed Classes and Instance Main Methods (Preview) ;翻译过来是 “未命名类和实例 main 方法”,仅看标题你可能并不认为和上面那些东西有什么关系,但事实上,上述特性确实是由此 JEP 带来的。

这种简化写法并不是 Java 的特例,其实早在 .NET 6,C# 就引入了一套 "控制台模板" 语法,其允许你在 C# 的主类文件(这里是 Program.cs)这么写:

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

其等价于:

using System;

namespace MyApp // Note: actual namespace depends on the project name.
{
internal class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
}
}
}

很神奇对不对,但实际上说简单点这只是套语法糖而已。那么,JEP 445 也是如此吗?答案是否定的,甚至,它连语法糖都没有引入

真的是变天了吗?

如果你仔细查看 JEP 提案的原文,你会发现他们在 Summary 和 Goal 上提到最多的两个词是:sutdentsbeginners:

而仔细读读这部分内容你会知道,这个 JEP 设立的初衷是为了为学生和 Java 新手隐去晦涩难懂的部分,仅保留一些简单的语法,方便他们快速入门和学习 Java,但并不是引入了一套额外的 Java 方言

从始至终,这套东西就不是给普通 Java 开发者使用的,而是面向学生和新手入门使用的。

有个可爱的美国老师居然创作了一首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初学者将会非常友好。

经过这二十多年的发展,围绕Java建立了庞大的生态,各种各样的软件应有尽有,让Java极其成功的同时,也让Java背上了沉重的包袱,要想简化成Python,JS那样的脚本语言,几乎不可能了,这次能够迈出一小步已经是难能可贵了。

文章目录
  1. 1. 真的是变天了吗?