Java这样写HelloWorld,差点给我整不会了!

40 阅读3分钟

哈喽!大家好!欢迎来到程序视点,我是小二哥。

前言

作为Java开发者,我们都知道OpenJDK是Java的参考实现,它是一个充满活力的开源项目,不断推动着Java平台的发展。而在最新的JEP 445提案中,OpenJDK团队正准备为Java语言引入一项全新的特性,让我们一起来看看这个令人兴奋的提案吧!

JEP 445提案的核心是简化 Java 的入门难度,也就是我通常说的Hello,World。先来看看经典的 Hello, World! 入门程序 :

class HelloWorld{
    public static void main(String[] args) { 
        System.out.println("Hello, World!");
    }
}

JEP 445提案

现在,JEP 445提案的作者 Ron Pressler 认为:作为新手入门的第一个程序,这段代码太复杂了。比如 class 声明和强制性的 public 访问修饰符是大型编程结构,它们在封装具有定义良好的外部组件接口的代码单元时很有用,但在这个入门小示例中毫无意义。String[] args 参数用于将代码与外部组件连接起来,但在这段代码里面不会被使用。static 修饰符是 Java 类和对象模型的一部分,但在新手村出现也为时尚早。

针对这个对初学者不太友好的问题,该提案引入了灵活的 Main 方法和匿名 Main 类的概念,以使 Java 学习过程更加平滑。以下是该提案的做法。

  • 允许省略 main 方法的 String[] 参数,并允许 main 方法既不是 public 也不是 static 。

于是,稍微简化 Hello, World! 是这样的:

class HelloWorld { 
  void main() { 
    System.out.println("Hello, World!"); 
  } 
}

具体意思是:允许已启动类的 main 方法具有 public 、 protected 或默认(即包)访问权限。 具体说来,是这样的:

如果启动的类不包含带 String[] args 参数的 static main 方法,但包含不带参数的 static main 方法,则调用该方法。

如果启动的类没有 static main 方法,但有一个非 private 零参数构造函数(即 public 、 protected 或包访问)和一个非 private 实例 main 方法,然后构造该类的一个实例。如果该类有一个带 String [] 参数的实例 main 方法,则调用该方法;否则,不带参数调用实例 main 方法。

  • 引入匿名 Main 类来隐式声明 class。

是的!连 class 声明都省略了。

void main() { 
  System.out.println("Hello, World!"); 
}

到这里,Java 的 Hello, World! 入门程序已经简化到一个方法了。但在 Ron 眼里,该 JEP 提供的优化只是使 Java 更易于学习的第一步,像 System.out.println() 这种长方法或函数也是需要简化的地方,不过这些问题需要在未来的 JEP 提案中逐步解决。

新功能体验

该提案的优化属于预览语言功能,默认禁用。要在 JDK 21 中尝试该示例,必须启用预览功能:用javac --release 21 --enable-preview Main.java编译程序,用java --enable-preview Main 运行。

另一种方式是在使用源代码启动器时,使用 java --source 21 --enable-preview Main.java 运行程序。

话说回来,无论是对于新手,还是老手Java开发者来说,JEP 445提案都将是一个令人期待的重大更新。小二哥觉得,更多的简化代码的提案也不是一件坏事,这样能给开发带来全新的体验和乐趣!但每个版本都在不断地加语法糖,整的和kotlin、groovy越来越像。会不会哪天也把main函数都去掉,像c#那样?

小结

对于技术发展和语言设计,不同人可能有不同的看法和偏好,而了解并尊重不同的观点也是促进技术进步和交流的重要一环。

Java 作为一门流行的编程语言,其入门难度一直是个问题。而 JEP 445 提案的出现,为 Java 的学习提供了更多的可能性。我想,或许这对越来越多的 Java 初学者来说更容易理解和入手。