ПУТЕШЕСТВИЕ ПО РАЗРАБОТКЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
Java 18: 4 основные функции, которые вы должны знать
Java 18: 4 основные функции, которые вы должны знать как инженер-программист
ОБЗОР
Java 18 была выпущена 22 марта 2022 года, это первый выпуск после последнего выпуска Long-Term-Support (LTS), Java 17. Если вы пропустили, вы можете посмотреть мою статью Java 17: 5 функций, которые вы должны знать. .
В этом уроке я расскажу о последней платформе Java, Java SE 18, включая новые функции и изменения. Java 18 стала общедоступной 22 марта 2022 года.
Во-первых, в Java 18 есть много предложений по улучшению JDK (JEP). Я разместил их в порядке номеров JEP, вы можете увидеть список ниже для Java 18:
- 400: UTF-8 по умолчанию
- 408: Простой веб-сервер
- 413: Фрагменты кода в документации Java API
- 416: Повторно реализовать Core Reflection с дескрипторами методов
- 417: Векторный API (Третий инкубатор)
- 418: SPI разрешения интернет-адресов
- 419: Внешние функции и API памяти (второй инкубатор)
- 420: Сопоставление шаблона для переключателя (второй предварительный просмотр)
- 421: Устаревшая финализация для удаления
Хотя у нас есть много функций в Java 18, я поделюсь четырьмя основными функциями, которые должны знать все разработчики программного обеспечения в версии Java 18. Давайте исследовать!
4 ОСНОВНЫЕ ФУНКЦИИ, КОТОРЫЕ ВЫ ДОЛЖНЫ ЗНАТЬ В JAVA 18
#1: UTF8 по умолчанию
Я считаю, что разработчикам Java приходится сталкиваться со многими проблемами, потому что набор символов Java различается в зависимости от операционной системы (Linux, Window и т. д.) и языковых настроек. Стандартные API-интерфейсы Java для чтения и записи файлов, кодировка которых передается в качестве аргумента. Набор символов управляет преобразованием между необработанными байтами и 16-битными значениями char
языка программирования Java. Поддерживаемые кодировки включают US-ASCII, UTF-8 и ISO-8859-1.
Если аргумент кодировки не передается функции, стандартные API Java обычно используют кодировку по умолчанию. JDK выбирает кодировку по умолчанию при запуске приложения в зависимости от среды выполнения: ОС, языковой стандарт пользователя и т. д.
Давайте рассмотрим этот пример, где у нас есть функция для написания текста «Счастливого кодирования!» на японском и запустите функцию в Unix (Linux или MacOS):
try (FileWriter fileWriter = new FileWriter("techisbeautiful.txt"); BufferedWriter bWriter = new BufferedWriter(fileWriter)) { bWriter.write("ハッピーコーディング!"); }
Если вы запустите функцию чтения ниже в Windows, у вас возникнут проблемы, поэтому вы не сможете прочитать текст, который вы написали:
try (FileReader fReader = new FileReader("techisbeautiful.txt"); BufferedReader br = new BufferedReader(fReader)) { String line = br.readLine(); System.out.println(line); }
Причина этого в том, что Unix хранит файл в формате UTF-8, а Windows читает его в формате Windows-1252. В этой новой версии Java 18 эта проблема решена, так как UTF-8 теперь используется по умолчанию.
#2: Простой веб-сервер
В Java 18 он предоставляет инструмент командной строки для запуска веб-сервера. Хотя этот инструмент не рекомендуется использовать в производственной среде, он полезен для проверки концепции, специального программирования или тестирования.
Чтобы запустить веб-сервер, мы можем использовать команду «jwebserver». По умолчанию он запускает сервер на локальном хосте: 8000.
$ jwebserver
вы можете использовать параметр -b
, чтобы указать IP-адрес, который сервер должен прослушивать. С помощью -p
вы можете изменить порт, а с помощью -d
каталог, который должен обслуживать сервер. С помощью -o вы можете настроить вывод журнала. Например:
$ jwebserver -b 127.0.0.50 -p 1234 -d /techisbeautiful -o verbose
Serving /techisbeautiful and subdirectories on 50 port 1234
URL http://127.0.0.50:1234/
Кроме того, вы можете получить список опций с пояснениями с помощью:
jwebserver -h
# 3: Повторно реализовать базовое отражение с помощью дескрипторов методов
Хотя это изменение редко будет использоваться разработчиком программного обеспечения, стоит знать об этом изменении, если вы работаете с отражением Java. Если вы работаете с Java, вы знаете, что всегда есть несколько подходов к использованию отражения Java. Например, чтобы прочитать приватное поле id
строки с помощью отражения, есть два способа:
1. Основное отражение:
Field field = String.class.getDeclaredField("id");
field.setAccessible(true);
byte[] id = (byte[]) field.get(string);
2. Дескрипторы методов
VarHandle handle =
MethodHandles.privateLookupIn(String.class, MethodHandles.lookup())
.findVarHandle(String.class, "id", byte[].class);
byte[] id = (byte[]) handle.get(string);
В Java 18 было решено повторно реализовать код классов отражения «java.lang.reflect.Method», «Field» и «Constructor» поверх дескрипторов методов «java.lang.invoke». Это уменьшит усилия по разработке API «java.lang.reflect» и «java.lang.invoke».
# 4: Улучшите способ создания документов Java API
В Java 18 он добавил тег «@snippet» в JavaDoc. В предыдущей версии, если вам нужно интегрировать многострочные фрагменты кода в JavaDoc, вы должны сделать это через ‹pre›…‹/pre›. У этого есть 2 недостатка:
- Без разрыва строки между тегом ‹pre› и кодом или без разрыва строки между кодом и ‹/pre›.
- Код должен начинаться сразу после звездочек
Это пример с ‹pre› для разработки JavaDoc:
/** * Write a text file with Java 11: * * <pre><b>try</b> (BufferedWriter writer = Files.<i>newBufferedWriter</i>(path)) { * writer.write("text"); *}</pre> */
Это пример с ‹pre› и {@code…}:
/** * Write a text file with Java 11: * * <pre>{@code try (BufferedWriter writer = Files.newBufferedWriter(path)) { * writer.write("text"); *}}</pre> */
Благодаря новому усовершенствованию в Java 18 мы можем написать Javadoc следующим образом:
/** * {@snippet : * try (BufferedWriter writer = Files.newBufferedWriter(path)) { * writer.write("text"); // @highlight substring="text" * } * } */
Вы можете видеть, что это намного проще.
КРАТКОЕ СОДЕРЖАНИЕ
В этой статье я поделился четырьмя основными новыми функциями Java 18, которые необходимо знать, с примерами. Мы можем суммировать четыре из них здесь:
- UTF-8 — это набор символов по умолчанию, независимо от настроек языка и локали.
- Использование команды «jwebserver» для быстрого запуска веб-сервера.
- Повторно реализуйте Core Reflection с помощью дескрипторов методов.
- Улучшите способ создания документов Java API.
Если вы пропустили «обязательные функции» в предыдущих версиях Java, вы можете проверить их ниже:
- Java 17: 5 функций, которые вы должны знать
- Java 11: 8 функций, которые вы должны знать
- Java 8: 7 функций, которые вы должны знать
Если вам понравилась эта история, пожалуйста, подпишитесь, подпишитесь на меня, чтобы первым получать электронные письма о моих следующих историях.
Вы можете стать участником Medium здесь, чтобы иметь неограниченный доступ ко всем историям на платформе Medium. Если вы используете ссылку выше, это также поддерживает меня, потому что у меня есть небольшая комиссия от Medium. Спасибо!