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

Руководство по версиям и функциям Java

Вы можете использовать это руководство, чтобы получить практическую информацию о том, как найти и установить последнюю версию Java, в разделе… Помеченный java, openjdk, jdk, adoptopenjdk.

Вы можете использовать это руководство, чтобы получить практическую информацию о том, как найти и установить последнюю версию Java, понять различия между дистрибутивами Java (AdoptOpenJDK, OpenJDK, OracleJDK и т.д.), А также получить обзор функций языка Java, включая версии Java 8-13.

Практическая информация

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

TL; DR Мне нужна только ссылка для скачивания и знать обо всем остальном. Куда мне идти?

Перейдите на сайт Adopt OpenJDK , выберите последнюю версию Java, загрузите и установите ее. Затем вернитесь к этому руководству, чтобы, возможно, еще кое-что узнать о версиях Java.

Какую версию Java я должен использовать?

По состоянию на сентябрь 2019 года Java 13 является последней выпущенной версией Java, причем новые версии следуют каждые 6 месяцев. Следовательно, Java 14 запланирована на март 2020 года, Java 15 – на сентябрь 2020 года и так далее. В прошлом циклы выпуска Java были намного длиннее , до 3-5 лет!.

С появлением такого количества новых версий в основном существуют сценарии использования в реальном мире ( ™ ):

  • Унаследованные проекты в компаниях часто связаны с использованием Java 8 (см. Почему компании все еще придерживаются Java 8? ) . Следовательно, вы также будете вынуждены использовать Java 8.

  • Некоторые устаревшие проекты даже застряли на Java 1.5 (выпущена в 2004 году) или 1.6 (выпущена в 2006 году) – извините, друзья!

  • Если вы хотите использовать самые последние IDE, фреймворки и инструменты сборки и начинаете новый проект, вы можете без колебаний использовать Java 11 (LTS) или даже последнюю версию Java 13.

  • Существует особая область разработки Android, где версия Java в основном застряла на Java 7, с определенным набором функций Java 8 доступных. Или вы переключаетесь на использование языка программирования Kotlin.

Почему компании все еще придерживаются Java 8?

Существует множество различных причин, по которым компании все еще придерживаются Java 8. Чтобы назвать несколько:

  • Инструменты сборки (Maven, Gradle и т. Д.) И некоторые библиотеки изначально имели ошибки с версиями Java > 8 и нуждались в обновлениях. Даже сегодня, например, с Java, некоторые инструменты сборки выводят предупреждения “отражающий доступ” при создании Java-проектов, которые просто “кажутся не готовыми”, хотя сборки в порядке.

  • Вплоть до Java 8 вы в значительной степени использовали сборки Oracle JDK, и вам не нужно было заботиться о лицензировании. Однако Oracle изменила схему лицензирования В 2019 году , что привело к тому, что Интернет сошел с ума от тонны статей, в которых говорилось: “Java больше не бесплатна”, – и последовала изрядная путаница. Однако на самом деле это не проблема, о которой вы узнаете в разделе Дистрибутивы Java этого руководства.

  • Некоторые компании придерживаются политики использования только версий LTS и полагаются на поставщиков своих ОС в предоставлении им этих сборок, что требует времени.

Подводя итог: у вас есть сочетание практических вопросов (обновление ваших инструментов, библиотек, фреймворков) и политических вопросов.

Почему некоторые версии Java, такие как 8, также называются 1.8?

Версии Java до 9 просто имели другую схему именования. Таким образом, Java 8 также можно назвать 1.8 , Java 5 можно назвать 1.5 и т.д. Когда вы выполнили команду “java -версия”, с этими версиями вы получили такой результат:

    c:\Program Files\Java\jdk1.8.0_191\bin>java -version
    java version "1.8.0_191" 
    Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

Что просто означает Java 8. С переходом на временные версии с Java 9 схема именования также изменилась, и версии Java больше не имеют префикса 1.x. Теперь номер версии выглядит так:

    c:\Program Files\Java\jdk11\bin>java -version
    openjdk version "11" 2018-09-25 
    OpenJDK Runtime Environment 18.9 (build 11+28)
    OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

В чем разница между версиями Java? Должен ли я выучить какой-то конкретный?

Исходя из других языков программирования с серьезными перерывами между выпусками, например, Python 2-3, вам может быть интересно, относится ли то же самое к Java.

Java является особенной в этом отношении, так как она чрезвычайно обратно совместима. Это означает, что ваша программа Java 5 или 8 гарантированно будет работать с виртуальной машиной Java 8-13 – за некоторыми исключениями, о которых вам пока не нужно беспокоиться.

Очевидно, что это не работает наоборот, скажем, ваша программа использует функции Java 13, которые просто недоступны в JVM Java 8.

Это означает несколько вещей:

  • Вы не просто “изучаете” конкретную версию Java, например 12.

  • Скорее всего, вы получите хорошую основу для всех языковых функций вплоть до Java 8. Это служит хорошей основой.

  • А затем узнайте из такого руководства, какие дополнительные функции появились в Java 9-13, и используйте их, когда сможете.

Каковы примеры этих новых функций между версиями Java?

Взгляните на раздел Java Features 8-13.

Но, как правило, более старые и длительные циклы выпуска (3-5 лет, вплоть до Java 8) означали множество новых функций в каждом выпуске.

6-месячный цикл выпуска означает гораздо меньше возможностей для каждого выпуска, так что вы можете быстро освоить языковые возможности Java 9-13.

В чем разница между JRE и JDK?

До сих пор мы говорили только о “Яве”. Но что такое Java на самом деле?

Во-первых, вам нужно различать JRE (Среда выполнения Java) и JDK (Набор для разработки Java).

Исторически сложилось так, что вы скачали только JRE если бы вас интересовал только запуск Java-программ. JRE включает в себя, среди прочего, виртуальную машину Java (JVM) и средство командной строки “java”.

Для разработки новых Java-программ вам необходимо было загрузить JDK . JDK включает в себя все , что есть в JRE, а также компилятор javac и пара других инструментов, таких как javadoc (Генератор документации Java) и jdb (Java-отладчик).

Теперь, почему я говорю в прошедшем времени?

Вплоть до Java 8 веб-сайт Oracle предлагал JRES и JDK в качестве отдельных загрузок, хотя JDK также всегда включал JRE в отдельную папку. С Java 9 это различие в основном исчезло, и вы всегда загружаете JDK. Структура каталогов JDKS также изменилась, и теперь в них больше нет явной папки JRE.

Таким образом, несмотря на то, что некоторые дистрибутивы (см. Раздел Дистрибутивы Java ) по-прежнему предлагают отдельную загрузку JRE, похоже, существует тенденция предлагать только JDK. Следовательно, мы собираемся использовать Java и JDK отныне взаимозаменяемы.

Как мне тогда установить Java или JDK?

Игнорируйте изображения Java-Docker, .msi обертки или пакеты для конкретной платформы на данный момент. В конце концов, Java – это просто zip-файл, не более и не менее.

Поэтому все, что вам нужно сделать, чтобы установить Java на свой компьютер, это распаковать zip-файл jdk-{5-13}.zip. Для этого вам даже не нужны права администратора.

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

    Directory C:\dev\jdk-11

    12.11.2019  19:24              .
    12.11.2019  19:24              ..
    12.11.2019  19:23              bin
    12.11.2019  19:23              conf
    12.11.2019  19:24              include
    12.11.2019  19:24              jmods
    22.08.2018  19:18              legal
    12.11.2019  19:24              lib
    12.11.2019  19:23             1.238 release

Волшебство происходит в каталоге/bin, который в Windows выглядит следующим образом:

    Directory C:\dev\jdk-11\bin
    ...
    12.11.2019  19:23           272.736 java.exe
    ...
    12.11.2019  19:23            20.832 javac.exe
    ...

Поэтому все, что вам нужно сделать, это распаковать этот файл и поместить каталог/bin в переменную PATH, чтобы вы могли вызвать команду “java” из любого места.

(Если вам интересно, установщики графического интерфейса, такие как Oracle или AdoptOpenJDK, выполнят распаковку и изменение переменной PATH для вас, вот и все.)

Чтобы убедиться, что вы правильно установили Java, вы можете просто запустить “java -версию”. Если результат выглядит так, как показано ниже, то все в порядке.

    openjdk version "11" 2018-09-25
    OpenJDK Runtime Environment 18.9 (build 11+28)
    OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)

Теперь остается один вопрос: откуда у вас этот zip-файл Java? Что подводит нас к теме дистрибутивов.

Дистрибутивы Java

Существует множество сайтов, предлагающих загрузку Java (читай: JDK) и непонятно, “кто что предлагает и с каким лицензированием”. Этот раздел прольет некоторый свет на это.

Проект OpenJDK

С точки зрения исходного кода Java (читай: исходный код для вашего JRE/JDK), существует только один , находящийся на сайте проекта OpenJDK .

Однако это всего лишь исходный код, а не распространяемая сборка (подумайте: ваш zip-файл с скомпилированной командой java для вашей конкретной операционной системы). Теоретически, мы с вами могли бы создать сборку из этого исходного кода, назвать ее, скажем, MarcoJDK и начать распространять ее. Но нашему дистрибутиву не хватило бы сертификации, чтобы иметь возможность легально называть себя Совместимость с Java SE .

Вот почему на практике существует несколько поставщиков, которые фактически создают эти сборки, получают их сертификацию (начальный ТИК ), а затем распространяют их.

И хотя поставщики не могут, скажем, удалить метод из класса String перед созданием новой сборки Java, они могут добавить брендинг (ура!) или добавить некоторые другие (например, CLI) утилиты, которые они считают полезными. Но в остальном исходный код тот же для все дистрибутивы Java.

Сборки OpenJDK (от Oracle) и сборки Oracle JDK

Одним из поставщиков, создающих Java из исходного кода, является Oracle. Это приводит к двум разным дистрибутивам Java , которые поначалу могут быть очень запутанными.

  1. OpenJDK строится компанией Oracle(!). Эти сборки бесплатны и не имеют бренда, но Oracle не будет выпускать обновления для более старых версий, скажем, Java 13, как только выйдет Java 14.

  2. Oracle JDK , который является фирменной коммерческой сборкой, начиная со смены лицензии в 2019 году. Это означает, что его можно использовать бесплатно во время разработки, но вам нужно заплатить Oracle, если вы используете его в производстве. За это вы получаете более длительную поддержку, т.е. обновления версий и номер телефона, по которому вы можете позвонить, если ваша JVM сойдет с ума.

Теперь, исторически (до Java 8) существовали фактические различия в источниках между сборками OpenJDK и сборками Oracle JDK, где вы могли бы сказать, что OracleJDK был “лучше”. Но на сегодняшний день обе версии по сути одинаковы, с незначительными различиями .

Затем все сводится к тому, что вам нужна платная коммерческая поддержка (номер телефона) для вашей установленной версии Java.

Принять OpenJDK

В 2017 году группа участников группы пользователей Java, разработчиков и поставщиков (Amazon, Microsoft, Pivotal, Red hat и другие) создала сообщество под названием AdoptOpenJDK .

Они предоставляют бесплатные, надежные сборки OpenJDK с более длительной доступностью/обновлениями и даже предлагают вам выбор из двух разных виртуальных машин Java: |/Точка доступа и Откройте J9 .

Настоятельно рекомендуется если вы хотите установить Java.

Азул Зулу, Амазонка Корретто, Машина для сока

Полный список сборок OpenJDK вы найдете по адресу OpenJDK Википедия сайт. Среди них Азул Зулу , , Amazon Corretto а также

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

Рекомендация

Повторяю с самого начала, в 2019 году, если у вас нет очень специфических требований, идите и получите свой jdk.zip (.tar.gz/.msi/.pkg) файл из https://adoptopenjdk.net или выберите пакет, предоставленный вашим поставщиком ОС.

Функции Java 8-13

Как упоминалось в самом начале этого руководства: По сути все (не будьте придирчивы сейчас) Языковые функции Java 8 также работают в Java 13. То же самое относится и ко всем другим промежуточным версиям Java.

Что, в свою очередь, означает, что все языковые функции Java 8 служат очень хорошими базовыми знаниями Java, а все остальное (Java 9-13) в значительной степени является дополнительными функциями поверх этой базовой линии.

Вот краткий обзор того, что могут предложить конкретные версии:

– Java 8 –

Java 8 была массовым выпуском, и вы можете найти список всех функций на веб-сайте Oracle . Однако здесь я хотел бы упомянуть два основных набора функций:

Языковые особенности: Лямбды и т.д.

До Java 8 всякий раз, когда вы хотели создать экземпляр, например, нового исполняемого файла, вам приходилось писать анонимный внутренний класс примерно так:

     Runnable runnable = new Runnable(){
           @Override
           public void run(){
             System.out.println("Hello world !");
           }
         };

С лямбдами тот же код выглядит следующим образом:

    Runnable runnable = () -> System.out.println("Hello world two!");

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

Коллекции и потоки

В Java 8 вы также получили операции в функциональном стиле для коллекций, также известные как Stream API. Краткий пример:

    List list = Arrays.asList("franz", "ferdinand", "fiel", "vom", "pferd");

Теперь, до Java 8, вам в основном приходилось писать циклы for, чтобы что-то сделать с этим списком.

С помощью API Streams вы можете выполнить следующие действия:

    list.stream()
        .filter(name -> name.startsWith("f"))
        .map(String::toUpperCase)
        .sorted()
        .forEach(System.out::println);

Если ты хочешь большего Практика Java 8

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

Если вам нужен более подробный, тщательный обзор, включая упражнения, вы можете взглянуть на мой Основные функции Java 8 курс.

– Java 9 –

Java 9 также была довольно большим релизом с несколькими дополнениями:

Коллекции

Коллекции получили пару новых вспомогательных методов, позволяющих легко создавать списки, наборы и карты.

    List list = List.of("one", "two", "three");
    Set set = Set.of("one", "two", "three");
    Map map = Map.of("foo", "one", "bar", "two");

Потоки

Потоки получили пару дополнений в виде методов takeWhile, dropWhile, iterate.

    Stream stream = Stream.iterate("", s -> s + "s")
      .takeWhile(s -> s.length() < 10);

Необязательный

Опционы получили крайне недостающий метод ifPresentOrElse.

    user.ifPresentOrElse(this::displayAccount, this::displayLogin);

Интерфейсы

Интерфейсы получили частные методы:

    public interface MyInterface {

        private static void myPrivateMethod(){
            System.out.println("Yay, I am private!");
        }
    }

Другие Языковые Особенности

И пара других улучшений, таких как улучшенная инструкция по использованию ресурсов или расширения оператора diamond.

J оболочка

Наконец, Java получила оболочку, в которой вы можете опробовать простые команды и получить немедленные результаты.

    % jshell
    |  Welcome to JShell -- Version 9
    |  For an introduction type: /help intro

    jshell> int x = 10
    x ==> 10

HttpClient HttpClient

Java 9 представила начальную предварительную версию нового HttpClient. До этого встроенная поддержка Http в Java была довольно низкоуровневой, и вам приходилось прибегать к использованию сторонних библиотек, таких как Apache HttpClient или OkHttp (кстати, отличные библиотеки!).

С Java 9 Java получила свой собственный современный клиент – хотя и в режиме предварительного просмотра, что означает, что в более поздних версиях Java могут быть внесены изменения.

Проект Jigsaw: Модули Java и файлы Jar с несколькими выпусками

Java 9 получила модульную систему Jigsaw , которая чем-то напоминает старую добрую спецификацию OSGI . В рамки данного руководства не входит подробное описание Jigsaw, но ознакомьтесь с предыдущими ссылками, чтобы узнать больше.

Мульти-Релиз .файлы jar позволяли иметь один из них.файл jar, содержащий разные классы для разных версий JVM. Таким образом, ваша программа может вести себя по-разному/использовать разные классы, например, при запуске на Java 8 по сравнению с Java 10.

Если вы хотите больше практиковаться в Java 9

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

– Java 10 –

В Java 10 произошло несколько изменений, таких как сборка мусора и т.д. Но единственное реальное изменение, которое вы, как разработчик, скорее всего, увидите, – это введение ключевого слова “var”, также называемого выводом типа локальной переменной.

Вывод типа локальной переменной: ключевое слово var

    // Pre-Java 10

    String myName = "Marco";

    // With Java 10

    var myName = "Marco"

Похоже на Javascript, не так ли? Однако он по-прежнему строго типизирован и применяется только к переменным внутри методов ((спасибо, дэш , за то, что снова указал на это).

– Java 11 –

Java 11 также была несколько меньшим выпуском с точки зрения разработчика.

Строки и файлы

Строки и файлы получили пару новых методов (не все перечислены здесь):

    "Marco".isBlank();
    "Mar\nco".lines();
    "Marco  ".strip();

    Path path = Files.writeString(Files.createTempFile("helloworld", ".txt"), "Hi, my name is!");
    String s = Files.readString(path);

Запускать Исходные Файлы

Начиная с Java 10, вы можете запускать исходные файлы Java без необходимости их предварительной компиляции. Шаг к написанию сценариев.

    ubuntu@DESKTOP-168M0IF:~$ java MyScript.java

Вывод типа локальной переменной (var) для лямбда-параметров

Заголовок говорит сам за себя:

    (var firstName, var lastName) -> firstName + lastName

HttpClient HttpClient

HttpClient из Java 9 в его окончательной версии без предварительного просмотра.

Другие вещи

Бортовой самописец, сборщик мусора без операции, устаревший движок Nashorn-Javascript и т. Д.

– Java 12 –

Java 12 получила пару новых функций и улучшений , но единственные, о которых стоит упомянуть здесь, – это поддержка Unicode 11 и предварительный просмотр нового выражения switch, которое вы увидите в следующем разделе.

– Ява 13 –

Вы можете найти полный список функций здесь , но, по сути, вы получаете поддержку Unicode 12.1, а также две новые или улучшенные функции предварительного просмотра (могут быть изменены в будущем):

Переключить выражение (Предварительный просмотр)

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

Старые инструкции switch выглядели так:

    switch(status) {
      case SUBSCRIBER:
        // code block
        break;
      case FREE_TRIAL:
        // code block
        break;
      default:
        // code block
    }

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

    boolean result = switch (status) {
        case SUBSCRIBER -> true;
        case FREE_TRIAL -> false;
        default -> throw new IllegalArgumentException("something is murky!");
    };

Многострочные строки (Предварительный просмотр)

Вы можете наконец сделать это на Java:

    String htmlBeforeJava13 = "\n" +
                  "    \n" +
                  "        

Hello, world

\n" + " \n" + "\n"; String htmlWithJava13 = """

Hello, world

""";

Java 14 и более поздние версии

Будет освещено здесь, как только они будут освобождены. Зайди в ближайшее время.

Плавник

К настоящему времени у вас должно быть довольно хорошее представление о паре вещей:

  • Как установить Java, какую версию получить и откуда ее взять (подсказка: AdoptOpenJDK ).

  • Что такое дистрибутив Java, какие из них существуют и в чем различия.

  • В чем заключаются различия между конкретными версиями Java.

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

Спасибо за чтение.

Признание

Стивен Коулборн, который написал фантастическую статью о различных доступных дистрибутивах Java.

Там, откуда это взялось, есть еще кое-что

Я вышлю вам обновленную информацию, когда опубликую новые руководства. Абсолютно никакого спама, никогда. Отпишитесь в любое время. Зарегистрируйтесь на рассылку новостей здесь: https://bit.ly/2K0Ao4F .

Оригинал: “https://dev.to/marcobehler/a-guide-to-java-versions-and-features-4m2m”