Особенность | Описание | Пример | Преимущества |
---|---|---|---|
Синтаксис локальных переменных для лямбда-параметров | Позволяет использовать вар в лямбда-выражениях для улучшения читаемости. | (вар x, вар y) -> x + y | Последовательность в коде. |
HTTP-клиент (стандартный) | Новый API HTTP-клиента, поддерживающий HTTP/1.1 и HTTP/2. | Клиент HttpClient = HttpClient.newHttpClient(); | Современный, многофункциональный API. |
Epsilon: бездействующий сборщик мусора | Сборщик мусора, не освобождающий память. | java -XX:+UseEpsilonGC MyApp | Полезно для тестирования производительности. |
Контроль доступа на основе гнезда | Упрощает контроль доступа для вложенных типов. | частный статический класс NestedClass {} | Улучшенная производительность. |
Динамические константы файлов классов | Новая форма постоянного пула CONSTANT_Динамический . | Н/Д | Снижение затрат и ограничений. |
Улучшения строкового API | Новые методы, такие как линии() , полоска() , и повторить (целое) . | текст.полоса() | Более мощные манипуляции со строками. |
Улучшения API файлов | Методы чтения и записи файлов в виде строк. | Files.writeString(путь, «Привет!»); | Упрощает файловые операции. |
Юникод 10 | Поддерживает последний стандарт Unicode. | Н/Д | Более полная поддержка персонажей. |
Самописец полета | Встроенный инструмент профилирования. | Н/Д | Расширенный мониторинг производительности. |
Удаление модулей Java EE и CORBA | Удалены модули Java EE и CORBA. | Н/Д | Оптимизированный JDK. |
Устаревшие инструменты и API Pack200 | Устаревшие инструменты и API сжатия Pack200. | Н/Д | Сигнализация о будущем удалении. |
В Java 11 появилось множество функций и улучшений, которые стоит изучить. Ниже мы более подробно рассмотрим каждую из этих новых функций, предоставив подробные описания, практические примеры и преимущества, которые они приносят разработчикам.
Синтаксис локальных переменных для лямбда-параметров
Одним из наиболее примечательных дополнений в Java 11 является поддержка вар
Ключевое слово в лямбда-выражениях. Эта функция упрощает синтаксис и улучшает читаемость кода, позволяя разработчикам использовать вар
для объявления формальных параметров неявно типизированных лямбда-выражений.
Пример:
(вар x, вар y) -> x + y
Преимущества:
- Последовательность: С использованием
вар
в параметрах лямбда приводит код в соответствие с объявлениями локальных переменных, снижая когнитивную нагрузку на разработчиков.
HTTP-клиент (стандартный)
Новый API-интерфейс HTTP-клиента, стандартизированный в Java 11, поддерживает как HTTP/1.1, так и HTTP/2. Этот современный и многофункциональный API упрощает выполнение операций HTTP.
Пример:
Клиент HttpClient = HttpClient.newHttpClient(); Запрос HttpRequest = HttpRequest.newBuilder() .uri(URI.create("https://example.com")) .build(); HttpResponse ответ = client.send(запрос, 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 упрощает правила доступа для вложенных типов, обеспечивая лучшую инкапсуляцию и контроль доступа внутри вложенных классов.
Пример:
общественный класс OuterClass {частный статический класс NestedClass {частный недействительный negedMethod() { System.out.println("Внутри NestedClass"); } } }
Преимущества:
- Улучшенная инкапсуляция: Обеспечивает лучший контроль над доступом к вложенным членам класса.
- Производительность: Повышает производительность за счет упрощения правил контроля доступа.
Динамические константы файлов классов
Вступление к CONSTANT_Динамический
в пуле констант позволяет использовать более гибкие и эффективные константы в файлах классов.
Преимущества:
- Сниженная стоимость: Снижает стоимость и ограничения, связанные с созданием новых типов констант файлов классов.
- Гибкость: Предоставляет более динамичные и гибкие способы обработки констант в байт-коде Java.
Улучшения строкового API
Java 11 вносит несколько улучшений в Нить
класс, включая новые методы, такие как линии()
, полоска()
, полосаЛидинг()
, полосаТрейлинг()
, повторить (целое)
, и isBlank()
.
Примеры:
Строка multiline = "line1\nline2\nline3"; multiline.lines().forEach(System.out::println); Строка текста = «Привет»; System.out.println(text.strip()); // «привет» System.out.println(text.stripLeading()); // "привет" System.out.println(text.stripTrailing()); // "привет" System.out.println("=".repeat(5)); // "====="
Преимущества:
- Мощные манипуляции со строками: Новые методы предоставляют более мощные и удобные способы манипулирования строками.
- Чистота кода: Упрощает общие операции со строками, что приводит к более чистому и читаемому коду.
Улучшения API файлов
The Файлы
класс в Java 11 включает новые методы, такие как читатьСтрока (Путь)
и writeString (Путь, CharSequence)
для чтения и записи файлов в виде строк.
Пример:
Путь path = Paths.get("file.txt"); Files.writeString(путь, «Привет, мир!»); Строковое содержимое = Files.readString(путь); System.out.println(содержимое);
Преимущества:
- Упрощенные операции с файлами: Делает чтение и запись файлов более простыми и менее подверженными ошибкам.
- Улучшенная производительность: Уменьшает количество шаблонного кода, повышая производительность разработчиков.
Юникод 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
Метод | Описание | Пример |
---|---|---|
линии() | Разбивает строку на строки. | multiline.lines().forEach(System.out::println); |
полоска() | Удаляет начальные и конечные пробелы. | текст.полоса() |
полосаЛидинг() | Удаляет ведущие пробелы. | text.stripLeading() |
полосаТрейлинг() | Удаляет конечные пробелы. | text.stripTrailing() |
повторить (целое) | Повторяет строку заданное количество раз. | "=".repeat(5) |
Новые функции Java 11 гарантируют разработчикам доступ к современным эффективным инструментам и API, что делает его незаменимым обновлением для любого проекта разработки Java.