Из приятных новостей для разработчиков Java следует отметить, что Java 18 отделилась от основной линейки в конце прошлого года и вступила во вторую фазу снижения. В этой статье освещаются некоторые функции, которые разработчики могут искать в предстоящем выпуске Java 18, в том числе новый простой модуль веб-сервера, более сложный способ аннотирования ваших документов Java и параметр –finalization=disabled, который позволяет вам проверить, как приложение Java будет работать. вести себя при удалении финализации в будущем выпуске. См. в конце статьи, где скачать Java 18 в сборках раннего доступа.

Новый простой веб-сервер Java

Java 18 предоставит минимально функциональный веб-сервер в модуле jdk.httpserver. У него есть API для доступа, а также бинарник в каталоге bin на случай, если вы захотите запустить сервер из командной строки.

Команда для запуска веб-сервера может быть простой:

$ jwebserver -b 0.0.0.0 -p 8000

Копировать фрагмент

Примечание. Дополнительные параметры командной строки и сведения о модуле jdk.httpserver см. в Документации JEP 408.

Если вам интересно, можете ли вы реализовать полноценный производственный веб-сервер с помощью простых API-интерфейсов веб-сервера, ответ — нет. Веб-сервер определенно не предназначен для такого использования. Во-первых, он взаимодействует через HTTP/1.1 и не поддерживает запросы PUT, поэтому не поддерживает динамический контент. Веб-сервер рекомендуется для прототипирования, тестирования и отладки. Ниже приведен пример фрагмента кода с комментариями:

import java.net.InetSocketAddress;
import java.nio.file.Path;
import com.sun.net.httpserver.SimpleFileServer;
import static com.sun.net.httpserver.SimpleFileServer.OutputLevel;
public class App {
public static void main( String[] args ){
    // Create a simple file server, given the socket address, path and output level
    var server = SimpleFileServer.createFileServer(new InetSocketAddress(8000),             Path.of("/home/java"), OutputLevel.VERBOSE);
    // Starting the server
    server.start();
    // A friendly message to get started.
    System.out.println( "We are getting started.. Hello World!" );
  }
}

Копировать фрагмент

Фрагменты кода в документации Java API

До Java 18 разработчики в основном вставляли образцы кода в комментарии Javadoc, используя аннотацию @code. Этот метод несколько ограничен и требует обходных путей. Например, всегда было сложно проверить, что находится внутри фрагмента кода, реализовать подсветку синтаксиса и вставить ссылки или escape-символы.

В качестве нового подхода JEP 413 предлагает использовать тег @snippet. Как указано в JEP, тег «можно использовать для объявления как встроенных фрагментов, где фрагмент кода включен в сам тег, так и внешних фрагментов, где код фрагмент читается из отдельного исходного файла.'

Вот пример встроенного фрагмента:

/**
* The following code shows how to use {@code Optional.isPresent}:
* {@snippet :
* if (v.isPresent()) {
*     System.out.println("v: " + v.get());
* }
* }
*/

Копировать фрагмент

Код находится между фигурными скобками, где за открывающей скобкой следует тег @snippet. Утилита Javadoc теперь также включает параметры для указания ссылок, выделения кода и т. д. См. JEP 413 для более подробной информации.

Набор символов UTF-8 по умолчанию

В предыдущих выпусках набор символов по умолчанию определялся при запуске среды выполнения Java и зависел от локали пользователя и кодировки по умолчанию. Таким образом, в Windows кодировка была windows-1252, тогда как в macOS это была UTF-8, за исключением локали POSIX C. С Java 18 UTF-8 будет использоваться по умолчанию для всех операционных систем.

Вы можете изменить кодировку по умолчанию, установив file.encoding на COMPAT; например, запустив java -Dfile.encoding=COMPAT. Этот параметр возвращается к алгоритму в Java 17.

Подготовьтесь к удалению finalize()

Если вы разрабатывали Java-приложения, вы, вероятно, знакомы с методом finalize(). Начиная с Java 9 рекомендуется не использовать finalize(), а вместо этого использовать оператор try-with-resources или новые API-интерфейсы Cleaner. JEP 421 помогает разработчикам подготовиться к окончательному удалению финализации. Вы можете запустить приложение с параметром –finalization=disabled, чтобы посмотреть, как оно будет вести себя без метода finalize(). Приятно видеть эту эволюцию. Для разработчика это также возможность более внимательно изучить поведение вашего приложения.

Примечание. В недавнем выпуске подкаста Inside Java обсуждаются проблемы с финализацией и чего ожидать от Java 18. Дополнительные сведения см. в документации к JEP 421.

Функции предварительного просмотра в Java 18

Некоторые функции, которые были включены на этапе разработки Java 18, все еще находятся в предварительной версии. К ним относится Vector API (JEP 417), который Гуннар Морлинг обсуждает в этом DevNation Tech Talk. API сторонних функций и памяти (JEP 419) и сопоставление с образцом для switch (JEP 420) также остаются в предварительной версии.

Где скачать Java 18

Чтобы попробовать Java 18, вы можете загрузить ранний доступ Eclipse Temurin builds с Eclipse Adoptium. Темурин — это название дистрибутива OpenJDK от Adoptium.

Если вы используете текущую версию Java и хотите сравнить возможности с Java 18, я также очень рекомендую Java Almanac. Он содержит страницу со списком всех новых функций и изменений в Java 18.

Заключение

В этой статье был краткий обзор некоторых основных моментов Java 18. Следите за страницей Red Hat Developer OpenJDK, чтобы узнать больше об обновлениях Java 18. Вы также можете начать работу с Red Hat build OpenJDK.

Первоначально опубликовано в Разработчики Red Hat