Особенность | Описание | Пример | Преимущества |
---|---|---|---|
Синтаксис локальных переменных для лямбда-параметров | Позволяет использовать var в лямбда-выражениях для улучшения читаемости. | (var x, var y) -> x + y | Последовательность в коде. |
HTTP-клиент (стандартный) | Новый API HTTP-клиента, поддерживающий HTTP/1.1 и HTTP/2. | HttpClient client = HttpClient.newHttpClient(); | Современный, многофункциональный API. |
Epsilon: бездействующий сборщик мусора | Сборщик мусора, не освобождающий память. | java -XX:+UseEpsilonGC MyApp | Полезно для тестирования производительности. |
Контроль доступа на основе гнезда | Упрощает контроль доступа для вложенных типов. | private static class NestedClass {} | Улучшенная производительность. |
Динамические константы файлов классов | Новая форма постоянного пула CONSTANT_Dynamic . | Н/Д | Снижение затрат и ограничений. |
Улучшения строкового API | Новые методы, такие как lines() , strip() , и repeat(int) . | text.strip() | Более мощные манипуляции со строками. |
Улучшения API файлов | Методы чтения и записи файлов в виде строк. | Files.writeString(path, "Hello!"); | Упрощает файловые операции. |
Юникод 10 | Поддерживает последний стандарт Unicode. | Н/Д | Более полная поддержка персонажей. |
Самописец полета | Встроенный инструмент профилирования. | Н/Д | Расширенный мониторинг производительности. |
Удаление модулей Java EE и CORBA | Удалены модули Java EE и CORBA. | Н/Д | Оптимизированный JDK. |
Устаревшие инструменты и API Pack200 | Устаревшие инструменты и API сжатия Pack200. | Н/Д | Сигнализация о будущем удалении. |
В Java 11 появилось множество функций и улучшений, которые стоит изучить. Ниже мы более подробно рассмотрим каждую из этих новых функций, предоставив подробные описания, практические примеры и преимущества, которые они приносят разработчикам.
Синтаксис локальных переменных для лямбда-параметров
Одним из наиболее примечательных дополнений в Java 11 является поддержка var
Ключевое слово в лямбда-выражениях. Эта функция упрощает синтаксис и улучшает читаемость кода, позволяя разработчикам использовать var
для объявления формальных параметров неявно типизированных лямбда-выражений.
Пример:
(var x, var y) -> x + y
Преимущества:
- Последовательность: С использованием
var
в параметрах лямбда приводит код в соответствие с объявлениями локальных переменных, снижая когнитивную нагрузку на разработчиков.
HTTP-клиент (стандартный)
Новый API-интерфейс HTTP-клиента, стандартизированный в Java 11, поддерживает как HTTP/1.1, так и HTTP/2. Этот современный и многофункциональный API упрощает выполнение операций HTTP.
Пример:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Преимущества:
- Современный API: Предлагает более мощный и гибкий способ обработки HTTP-запросов и ответов.
- Улучшенная производительность: Поддерживает HTTP/2, что позволяет повысить производительность за счет таких функций, как мультиплексирование.
Epsilon: бездействующий сборщик мусора
В Java 11 представлен Epsilon, бездействующий сборщик мусора, который не освобождает память. Это особенно полезно для тестирования производительности и оценки нагрузки на память.
Пример:
java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx2g MyApp
Преимущества:
- Тестирование производительности: Помогает в сравнительном тестировании и тестировании производительности, устраняя накладные расходы на сбор мусора.
- Управление памятью: Полезно в сценариях, где распределение памяти управляется извне.
Контроль доступа на основе гнезда
Управление доступом на основе гнезд в Java 11 упрощает правила доступа для вложенных типов, обеспечивая лучшую инкапсуляцию и контроль доступа внутри вложенных классов.
Пример:
public class OuterClass {
private static class NestedClass {
private void nestedMethod() {
System.out.println("Inside NestedClass");
}
}
}
Преимущества:
- Улучшенная инкапсуляция: Обеспечивает лучший контроль над доступом к вложенным членам класса.
- Производительность: Повышает производительность за счет упрощения правил контроля доступа.
Динамические константы файлов классов
Вступление к CONSTANT_Dynamic
в пуле констант позволяет использовать более гибкие и эффективные константы в файлах классов.
Преимущества:
- Сниженная стоимость: Снижает стоимость и ограничения, связанные с созданием новых типов констант файлов классов.
- Гибкость: Предоставляет более динамичные и гибкие способы обработки констант в байт-коде Java.
Улучшения строкового API
Java 11 вносит несколько улучшений в String
класс, включая новые методы, такие как lines()
, strip()
, stripLeading()
, stripTrailing()
, repeat(int)
, и isBlank()
.
Примеры:
String multiline = "line1\nline2\nline3";
multiline.lines().forEach(System.out::println);
String text = " hello ";
System.out.println(text.strip()); // "hello"
System.out.println(text.stripLeading()); // "hello "
System.out.println(text.stripTrailing()); // " hello"
System.out.println("=".repeat(5)); // "====="
Преимущества:
- Мощные манипуляции со строками: Новые методы предоставляют более мощные и удобные способы манипулирования строками.
- Чистота кода: Упрощает общие операции со строками, что приводит к более чистому и читаемому коду.
Улучшения API файлов
The Files
класс в Java 11 включает новые методы, такие как readString(Path)
и writeString(Path, CharSequence)
для чтения и записи файлов в виде строк.
Пример:
Path path = Paths.get("file.txt");
Files.writeString(path, "Hello, World!");
String content = Files.readString(path);
System.out.println(content);
Преимущества:
- Упрощенные операции с файлами: Делает чтение и запись файлов более простыми и менее подверженными ошибкам.
- Улучшенная производительность: Уменьшает количество шаблонного кода, повышая производительность разработчиков.
Юникод 10
Java 11 поддерживает Unicode 10, который включает новые символы и сценарии, гарантируя, что приложения Java смогут обрабатывать новейшие международные символы.
Преимущества:
- Комплексная поддержка персонажей: Обеспечивает лучшую поддержку интернационализации и локализации.
Самописец полета
Java Flight Recorder (JFR) теперь включен в OpenJDK и представляет собой мощный инструмент для профилирования и мониторинга приложений Java.
Преимущества:
- Мониторинг производительности: Помогает в диагностике проблем с производительностью, записывая подробную информацию о выполнении приложения.
- Встроенный инструмент: Интегрирован в JDK, что делает его доступным без необходимости использования внешних инструментов.
Удаление модулей Java EE и CORBA
В Java 11 удалены модули Java EE и CORBA, которые устарели в более ранних версиях. Эти API теперь доступны как отдельные библиотеки.
Преимущества:
- Оптимизированный JDK: Уменьшает размер и сложность JDK, делая его более легким и эффективным.
Устаревшие инструменты и API Pack200
Инструменты сжатия Pack200 и API-интерфейсы устарели в Java 11, что означает их удаление в будущем выпуске.
Преимущества:
- Перспективность: Призывает разработчиков переходить на более современные инструменты сжатия, готовясь к возможному удалению Pack200.
Заключение
Java 11 содержит множество новых функций и улучшений, которые расширяют возможности языка и повышают производительность разработчиков. Эти обновления — от современного HTTP-клиентского API до мощных усовершенствований строкового и файлового API — делают Java более надежной и эффективной платформой. Хотя удаление устаревших модулей и внедрение новых сборщиков мусора, таких как Epsilon, демонстрируют четкую направленность на производительность и модернизацию, разработчикам следует принять эти изменения, чтобы использовать весь потенциал Java 11.
Таблицы и подробные описания: Чтобы обеспечить более полное понимание, ниже приведены подробные описания и примеры некоторых функций со встроенными таблицами:
Таблица улучшений строкового API
Метод | Описание | Пример |
---|---|---|
lines() | Разбивает строку на строки. | multiline.lines().forEach(System.out::println); |
strip() | Удаляет начальные и конечные пробелы. | text.strip() |
stripLeading() | Удаляет ведущие пробелы. | text.stripLeading() |
stripTrailing() | Удаляет конечные пробелы. | text.stripTrailing() |
repeat(int) | Повторяет строку заданное количество раз. | "=".repeat(5) |
Новые функции Java 11 гарантируют разработчикам доступ к современным эффективным инструментам и API, что делает его незаменимым обновлением для любого проекта разработки Java.