Java 11即将完成,并且进入了下降阶段 。 好像在几周前就发布了Java 9,而在这里,距离发布Java 11不到几个月。 鉴于Java的新发行过程和时间表,这将变得司空见惯。 不管那是好事,我们都将其搁置一旁。

这里列出了Java 11中的更改。 这些是此版本中的一些不错的增强功能。 我非常兴奋的其中两个是:

– HTTP客户端(标准) http://openjdk.java.net/jeps/321 ,它将HTTP客户端API作为Java语言的一部分引入。

–启动单文件源代码程序http://openjdk.java.net/jeps/330

在本文中,我将介绍“启动单文件源代码程序”功能。 此增强功能旨在实现的目的是使运行包含单个文件的Java代码变得容易,该文件中包含“ main()”方法。

假设您在org / myapp目录下的HelloWorld.java文件中有一个简单的HelloWorld程序,如下所示:

package org.myapp;


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

现在,没有建议的功能,为了运行该程序,用户必须首先使用javac命令对其进行编译:

javac org/myapp/HelloWorld.java

成功编译后,您可以运行java命令来执行程序:

java org.myapp.HelloWorld

因此,这是一个两步过程。 即使对于初学者来说,它看起来也是微不足道的,但是不仅对于初学者,甚至对于经常使用Java的开发人员,它仍然可以变得更加简单。

Java 11发布后(或者如果您想立即尝试,可以从http://jdk.java.net/11/获取早期访问版本),我们可以按以下方式运行上述程序(作为单个命令) :

java org/myapp/HelloWorld.java

注意这里的区别:

1.一,我们不再使用javac命令来显式编译源代码

2.现在,将Java命令的路径传递到源文件(org / myapp / HelloWorld.java)的路径,而不是之前用来传递全限定类名的路径。

这种差异虽然很小,但很重要,因为通过Java命令传递的文件名以.java扩展名结尾的文件路径后,它现在“了解”它现在必须在内部做任何必要的事情(例如编译源代码)。 当然,这样的文件应该包含常规/有效的Java代码,并带有顶级类,该顶级类公开“ public static void main(String [])”方法。

此外,就像常规Java程序一样,您可以像以前一样继续将应用程序特定的参数传递给该程序。 例如,对于下面显示的计算器程序,在org / myapp / Calculator.java文件中:

package org.myapp;


public class Calculator {
 
 public static void main(final String[] args) throws Exception {
  final int sum = Integer.parseInt(args[0]) +  Integer.parseInt(args[1]);
  System.out.println(args[0] + " + " + args[1] + " = " + sum);
 }
}

您可以按以下方式传递程序参数:

java org/myapp/Calculator.java 2 4

其中2和4作为程序参数传递,您将看到如下输出:

2 + 4 = 6

此功能还增加了对“ shebang”文件的支持,这些文件应具有有效的Java代码以及“ shebang”。 就个人而言,我不太喜欢该功能的这一特定方面。 但是,好消息是, JDK团队从社区中获得了反馈,并提出了该功能的这一附加方面,即非侵入性(用于已经处理Java源文件的工具/命令),如果我们不这样做,我们中的一些人可能会忽略这一点。不想使用它。 何时/如何使用“ shebang”文件用于此功能的详细信息在链接的JEP-330中进行了说明

到目前为止,尽管Java 11尚未发布,但我一直在使用早期访问版本,并在我的一些常规工作中广泛使用此功能,有时会涉及到一些简短的程序来帮助重现问题。 我通常不使用IDE来执行此类操作,因此能够对此类文件发出单个命令并执行它们是一个值得欢迎的增强功能。