Рубрики
Без рубрики

Функции Java 11

Функции Java 11, Загрузка и установка Java 11, поддержка Java 11 IDE, установка OpenJDK Java 11, функции разработчиков Java 11, новые пакеты Java 11, метод

Автор оригинала: Pankaj Kumar.

Мы еще не полностью погрузились в Java 10, а Java 11 уже здесь. Java 11 важна не только по нескольким причинам. Oracle обновила свою модель поддержки и разработала программу выпуска, которая будет быстро обновляться примерно каждые 6 месяцев.

Они изменили модель лицензирования и поддержки, что означает, что если вы загрузите Java 11 Oracle JDK, он будет оплачен для коммерческого использования.

Примечание : IntelliJ IDEA 2018.2.4 Community Edition уже поддерживает Java 11.

1. Почему Java 11 важна?

Java 11 является вторым выпуском LTS после Java 8. Начиная с Java 11, Oracle JDK больше не будет бесплатным для коммерческого использования.

Вы можете использовать его на этапах разработки, но для коммерческого использования вам необходимо купить лицензию. Если вы этого не сделаете, вы можете получить счет-фактуру от Oracle в любой день!

Java 10 была последней бесплатной версией Oracle JDK, которую можно было загрузить.

Oracle прекращает поддержку Java 8 с января 2019 года. Вам нужно будет заплатить за дополнительную поддержку. Вы можете продолжать использовать его, но не получите никаких исправлений/обновлений безопасности.

Хотя Oracle JDK больше не является бесплатным, вы всегда можете скачать сборки OpenJDK от Oracle или других поставщиков, таких как AdoptOpenJDK, Azul, IBM, Red Hat и т.д. На мой взгляд, если вы не ищете использование на уровне предприятия с желанием платить за поддержку, вы можете использовать OpenJDK и обновлять их по мере необходимости.

2. Какую сборку JDK мне следует загрузить и каковы преимущества каждой из них?

Поскольку Oracle создала программу выпуска, в которой новая версия будет появляться каждые шесть месяцев, если вы используете бесплатный открытый JDK от Oracle, вам нужно будет обновлять его каждые шесть месяцев, поскольку Oracle не будет предоставлять бесплатные обновления после выпуска новой версии. Это может быть непросто адаптировать к компании.

Оплачивайте коммерческую поддержку Oracle и переходите только с одной версии LTS на следующую версию LTS. Таким образом, вы получите все обновления и поддержку Java 11 до 2026 года. Вы можете скачать Java 17 в 2022 году.

Оставайтесь на бесплатной версии Java даже после того, как ее поддержка закончится. Хотя вы не получите обновлений безопасности, и это может открыть лазейки в системе безопасности.

Поняв, с каким багажом поставляется Java 11, давайте теперь проанализируем важные функции Java 11 для разработчиков. Мы также обсудим некоторые важные вопросы.

Примечание: JavaFX будет доступен как отдельный модуль и не привязан к расписанию 6-месячного цикла выпуска Java Jdk.

3. Как скачать бесплатную версию Java 11?

Вы можете скачать готовую к работе версию OpenJDK по этой ссылке |. Двоичные файлы находятся в формате tar или zip, поэтому просто распакуйте их и установите переменные среды для использования компилятора java и команд java.

4. Функции Java 11

Некоторые из важных функций Java 11 являются:

  • Запуск файла Java с помощью одной команды
  • Новые служебные методы в классе String
  • Синтаксис локальной переменной для лямбда-параметров
  • Управление Доступом На Основе Вложенности
  • JPG 321: HTTP-клиент
  • Чтение/Запись строк в файлы и из файлов
  • JEP 328: Бортовой самописец

Давайте обсудим новые функции, представленные в Java 11 в процессе JEP.

4.1) Запуск файла Java с помощью одной команды

Одним из основных изменений является то, что вам не нужно сначала компилировать исходный файл java с помощью инструмента javac . Вы можете напрямую запустить файл с помощью команды java , и он неявно компилируется. Эта функция входит в JEP 330.

Ниже приведен краткий обзор новых методов класса Java String, представленных в Java 11:

4.2) Строковые методы Java

isBlank() – Этот метод экземпляра возвращает логическое значение. Пустые строки и строки, содержащие только пробелы, рассматриваются как пустые.

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        // Your code here!
        
        System.out.println(" ".isBlank()); //true
        
        String s = "Anupam";
        System.out.println(s.isBlank()); //false
        String s1 = "";
        System.out.println(s1.isBlank()); //true
    }
}

строки()

Этот метод возвращает поток строк, представляющий собой набор всех подстрок, разделенных строками.

import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) throws Exception {
        
        String str = "JD\nJD\nJD"; 
        System.out.println(str);
        System.out.println(str.lines().collect(Collectors.toList()));
    }
}

Вывод вышеприведенного кода является:

полоса(), ведущая полоса(), задняя полоса()

strip() – Удаляет пробелы как в начале, так и в конце строки.

strip() является “зависящей от Юникода” эволюцией trim() .

Когда был представлен trim () , Юникод не развивался. Теперь новая функция strip() удаляет все виды пробелов, ведущих и завершающих(проверьте метод Символ.Пробел(c) чтобы узнать, является ли юникод пробелом или нет)

Пример использования вышеперечисленных трех методов приведен ниже:

public class Main {
    public static void main(String[] args) throws Exception {
        // Your code here!
        
        String str = " JD "; 
        System.out.print("Start");
        System.out.print(str.strip());
        System.out.println("End");
        
        System.out.print("Start");
        System.out.print(str.stripLeading());
        System.out.println("End");
        
        System.out.print("Start");
        System.out.print(str.stripTrailing());
        System.out.println("End");
    }
}

Вывод в консоли из приведенного выше кода выглядит следующим образом:

повторите(int)

Метод repeat просто повторяет строку столько раз, сколько указано в методе, в форме int.

public class Main {
    public static void main(String[] args) throws Exception {
        // Your code here!
        
        String str = "=".repeat(2);
        System.out.println(str); //prints ==
    }
}

4.3) Синтаксис локальной переменной для лямбда-параметров

JEP 323 , Синтаксис локальной переменной для Лямбда Параметров-единственная языковая функция, выпущенная в Java 11. В Java 10 был введен вывод типа локальной переменной . Таким образом, мы могли бы определить тип переменной из массива RHS – var();

JEP 323 позволяет использовать var для объявления формальных параметров неявно типизированного лямбда-выражения.

Теперь мы можем определить:

(var s1, var s2) -> s1 + s2

Это было возможно и в Java 8, но было удалено в Java 10. Теперь он вернулся в Java 11, чтобы сохранить единообразие.

Но зачем это нужно, когда мы можем просто пропустить тип в лямбде? Если вам нужно применить аннотацию так же, как @Nullable, вы не можете этого сделать, не определив тип.

Ограничение этой функции – Вы должны указать тип var для всех параметров или нет. Такие вещи, как следующее, невозможны:

(var s1, s2) -> s1 + s2 //no skipping allowed
(var s1, String y) -> s1 + y //no mixing allowed

var s1 -> s1 //not allowed. Need parentheses if you use var in lambda.

4.4) Управление Доступом На Основе Вложенности

До Java 11 это было возможно:

public class Main {
 
    public void myPublic() {
    }
 
    private void myPrivate() {
    }
 
    class Nested {
 
        public void nestedPublic() {
            myPrivate();
        }
    }
}

частный метод основного класса доступен из вышеуказанного вложенного класса вышеуказанным способом. Но если мы используем Отражение Java , это приведет к исключению IllegalStateException .

Method method = ob.getClass().getDeclaredMethod("myPrivate");
method.invoke(ob);

Вложенный контроль доступа Java 11 решает эту проблему в отражении. java.язык.Класс вводит три метода в API отражения: getNestHost() , getNestMembers () и isNestmateOf() .

4.5) JEP 309: Динамические параметры класса

Формат файла класса Java теперь расширяет поддержку новой формы пула констант, CONSTANT_Dynamic. Цель этого ПРИЛОЖЕНИЯ состоит в том, чтобы снизить затраты и затруднить разработку новых форм материализуемых ограничений файлов классов путем создания единой новой формы пула констант, которую можно параметризовать с помощью поведения, предоставляемого пользователем. Это повышает производительность

4.6) JPG 318: Эпсилон: Сборщик мусора без Операций

В отличие от GC JVM, который отвечает за выделение и высвобождение памяти, Epsilon выделяет только память. Он выделяет память для следующих целей:

  • Тестирование производительности.
  • Проверка давления в памяти.
  • Тестирование интерфейса виртуальной машины.
  • Крайне недолговечная работа.
  • Улучшения задержки последней капли.
  • Повышение пропускной способности в последнюю очередь.

Теперь Elipson подходит только для тестовых сред. Это приведет к ошибке в производстве и сбою приложений.

Преимуществом Elipson является отсутствие накладных расходов на очистку памяти. Следовательно, это даст точный результат тестирования производительности, и мы больше не можем требовать его остановки.

Примечание: Это экспериментальная функция.

4.7) JEP 320: Удалите модули Java EE и CORBA

Модули уже устарели в Java 9. Теперь они полностью удалены.

Удаляются следующие пакеты: javax.xml.ws , javax.xml.привязка , javax.активация , javax.xml.ws.аннотация , java.corba , java.транзакция , java.se.ee , jdk.xml.ws , jdk.xml.bind

4.8) JEP 328: Бортовой самописец

Бортовой самописец, который ранее был коммерческим дополнением к Oracle JDK, теперь доступен с открытым исходным кодом, поскольку Oracle JDK сам по себе больше не является бесплатным.

JFR-это инструмент профилирования, используемый для сбора данных диагностики и профилирования из запущенного приложения Java. Его накладные расходы на производительность незначительны и обычно составляют менее 1%. Следовательно, его можно использовать в производственных приложениях.

4.9) JIP 321: HTTP-клиент

Java 11 стандартизирует API Http – клиента. Новый API поддерживает как HTTP/1.1, так и HTTP/2. Он предназначен для повышения общей производительности отправки запросов клиентом и получения ответов от сервера. Он также изначально поддерживает веб-сайты.

4.10) Чтение/Запись строк в файлы и из файлов

Java 11 стремится сделать чтение и запись строк удобными. В нем представлены следующие методы чтения и записи в/из файлов:

  • Строка чтения()
  • Запись()

Следующий код демонстрирует пример этого

Path path = Files.writeString(Files.createTempFile("test", ".txt"), "This was posted on JD");
System.out.println(path);
String s = Files.readString(path);
System.out.println(s); //This was posted on JD

4.11) JEP 329: Криптографические алгоритмы ChaCha20 и Poly1305

Java 11 предоставляет реализации шифров ChaCha20 и ChaCha20-Poly1305. Эти алгоритмы будут реализованы в поставщике SunJCE.

4.12) JEP 315: Улучшение встроенных функций Aarch64

Улучшите существующие встроенные функции строк и массивов и внедрите новые встроенные функции для java.lang.Математические функции sin, cos и log на процессорах AArch64.

4.13) JEP 333: ZGC: Масштабируемый Сборщик Мусора с низкой задержкой (Экспериментальный)

Java 11 представила GC с низкой задержкой. Это экспериментальная функция. Приятно видеть, что Oracle придает большое значение GC.

4.14) JEP 335: Устарел движок Nashorn JavaScript

Движок сценариев JavaScript и API Nashorn устарели, что указывает на то, что они будут удалены в последующих выпусках.

5. Заключение

Мы рассмотрели важные функции и обновления, предоставляемые в Java 11. Увидимся в ближайшее время, когда выйдет Java 12.