Статьи

Новые возможности Java 11 — запуск однофайловых исходных программ

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 ().

Представьте, что у вас есть простая программа HelloWorld, как показано ниже в файле HelloWorld.java в каталоге org / myapp:

1
2
3
4
5
6
7
8
9
package org.myapp;
 
 
public class HelloWorld {
     
    public static void main(String[] args) throws Exception {
        System.out.println("Hello World!");
    }
}

Прямо сейчас, без предложенной функции, чтобы запустить эту программу, пользователь должен сначала скомпилировать ее с помощью команды javac:

1
javac org/myapp/HelloWorld.java

Как только это успешно скомпилируется, вы запускаете команду java для выполнения программы:

1
java org.myapp.HelloWorld

Так что это двухэтапный процесс. Это выглядит тривиально даже для начинающих, но все же его можно упростить не только для начинающих, но даже для разработчиков, которые регулярно работают с Java.

Как только Java 11 будет выпущена (или если вы захотите попробовать ее сейчас, вы можете получить ранние сборки доступа с http://jdk.java.net/11/ ), мы можем запустить вышеуказанную программу следующим образом (в виде одной команды) :

1
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:

01
02
03
04
05
06
07
08
09
10
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);
 }
}

Вы можете передать аргументы программы следующим образом:

1
java org/myapp/Calculator.java 2 4

где 2 и 4 передаются в качестве аргументов программы, и вы увидите выходные данные следующим образом:

1
2 + 4 = 6

Эта функция также добавляет поддержку файлов «shebang», файлов , которые, как ожидается, будут иметь действительный код Java плюс «shebang». Лично я не слишком люблю этот специфический аспект функции. Тем не менее, хорошо, что команда JDK взяла обратную связь от сообщества и сделала этот дополнительный аспект незаметным (для инструментов / команд, которые уже имеют дело с исходными файлами Java) и кое-что, что некоторые из нас могут игнорировать, если мы не хочу его использовать. Подробная информация о том, когда и как использовать файлы «shebang» для этой функции, объясняется в связанном JEP-330 .

До сих пор, хотя Java 11 еще не была выпущена, я использовал ранние сборки доступа и широко использовал эту функцию для некоторых моих обычных работ, которые иногда включают в себя создание коротких программ, которые помогают воспроизвести проблему. Я обычно не использую интегрированные среды разработки для подобных вещей, поэтому приветствуется возможность выдавать одну команду для таких файлов и выполнять их.

См. Оригинальную статью здесь: предстоящие функции Java 11 — запуск однофайловых исходных программ.

Мнения, высказанные участниками Java Code Geeks, являются их собственными.