Особливість | опис | приклад | Переваги |
---|---|---|---|
Синтаксис локальної змінної для лямбда-параметрів | Дозволяє використовувати 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 | Корисно для тестування продуктивності. |
Контроль доступу на основі Nest | Спрощує контроль доступу для вкладених типів. | private static class NestedClass {} | Покращена продуктивність. |
Динамічні константи файлів класів | Нова форма постійного пулу CONSTANT_Dynamic . | N/A | Зменшена вартість і обмеження. |
Покращення API рядків | Нові методи, як lines() , strip() , і repeat(int) . | text.strip() | Потужніше маніпулювання рядками. |
Покращення Files API | Методи читання та запису файлів у вигляді рядків. | Files.writeString(path, "Hello!"); | Спрощує роботу з файлами. |
Юнікод 10 | Підтримує останній стандарт Unicode. | N/A | Більш повна підтримка персонажів. |
Бортовий самописець | Вбудований інструмент профілювання. | N/A | Покращений моніторинг продуктивності. |
Видалення модулів Java EE та CORBA | Модулі Java EE та CORBA видалено. | N/A | Оптимізований JDK. |
Застарілі інструменти та API Pack200 | Застарілі інструменти стиснення Pack200 та API. | N/A | Сигналізація майбутнього видалення. |
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
Переваги:
- Тестування продуктивності: Допомагає в порівняльному аналізі та тестуванні продуктивності, усуваючи накладні витрати на збирання сміття.
- Керування пам'яттю: Корисно в сценаріях, коли розподіл пам’яті керується зовні.
Контроль доступу на основі Nest
Керування доступом на основі Nest у 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)); // "====="
Переваги:
- Потужна маніпуляція рядками: Нові методи пропонують більш потужні та зручні способи маніпулювання рядками.
- Чистота коду: Спрощує звичайні операції з рядками, створюючи чистіший і читабельніший код.
Покращення Files 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 пропонує безліч нових функцій і вдосконалень, які покращують можливості мови та продуктивність розробника. Ці оновлення роблять Java надійнішою та ефективнішою платформою, від сучасного API клієнта HTTP до потужних удосконалень рядкового та файлового API. У той час як видалення застарілих модулів і впровадження нових збирачів сміття, таких як 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.