Какая версия java последняя
Перейти к содержимому

Какая версия java последняя

  • автор:

Java Downloads

Java 17 LTS is the latest long-term support release for the Java SE platform. JDK 19 and JDK 17 binaries are free to use in production and free to redistribute, at no cost, under the Oracle No-Fee Terms and Conditions.

JDK 19 will receive updates under these terms, until March 2023 when it will be superseded by JDK 20.

JDK 17 will receive updates under these terms, until at least September 2024.

  • Java 19
  • Java 17

Java SE Development Kit 19.0.2 downloads

Thank you for downloading this release of the Java™ Platform, Standard Edition Development Kit (JDK™). The JDK is a development environment for building applications and components using the Java programming language.

The JDK includes tools for developing and testing programs written in the Java programming language and running on the Java platform.

  • Linux
  • macOS
  • Windows

JDK Script-friendly URLs

The URLs listed above will remain the same for JDK update releases to allow their use in scripts.

Release information

  • Online Documentation
  • Installation Instructions
  • Release Notes
  • Documentation License
  • JDK 19 Licensing Information User Manual (includes third-party licenses)
  • Certified System Configurations
  • Readme

Java SE Development Kit 17.0.6 downloads

Thank you for downloading this release of the Java™ Platform, Standard Edition Development Kit (JDK™). The JDK is a development environment for building applications and components using the Java programming language.

The JDK includes tools for developing and testing programs written in the Java programming language and running on the Java platform.

  • Linux
  • macOS
  • Windows

JDK Script-friendly URLs

The URLs listed above will remain the same for JDK update releases to allow their use in scripts.

Release information

  • Online Documentation
  • Installation Instructions
  • Release Notes
  • Documentation License
  • JDK 17 Licensing Information User Manual (includes third-party licenses)
  • Certified System Configurations
  • Readme

Java logo

Protect your investment—and more

Java SE subscribers get support for JDK 17, receive updates until at least October 2029, are entitled to GraalVM Enterprise, Java Management Service, and bundled patch releases (BPRs) with fixes not yet available to nonsubscribers, and more.

Java SE subscribers have more choices

Also available for development, personal use, and to run other licensed Oracle products.

  • Java 8
  • Java 11

Java SE Development Kit 8u361

Java SE subscribers will receive JDK 8 updates until at least December 2030.

The Oracle JDK 8 license changed in April 2019

The Oracle Technology Network License Agreement for Oracle Java SE is substantially different from prior Oracle JDK 8 licenses. This license permits certain uses, such as personal use and development use, at no cost — but other uses authorized under prior Oracle JDK licenses may no longer be available. Please review the terms carefully before downloading and using this product. FAQs are available here.

Commercial license and support are available for a low cost with Java SE Subscription.

Из 8 в 13: полный обзор версий Java. Часть 1

Из 8 в 13: полный обзор версий Java. Часть 1 - 1

Котята, всем привет)) Итак, сегодня у нас на дворе 2020-й год, и до выхода Java 14 осталось совсем немного. Готовую версию стоит ждать 17 марта, анализировать, что там пришло свеженького и интересного уже будем постфактум, ну а сегодня хотелось бы освежить память по предыдущим версиям Java. Что нового они нам принесли? Давайте посмотрим. А начнем обзор с Java 8, так как она ещё довольно актуальна и юзается в большинстве проектов. Ранее новые версии выходили раз в 3-5 лет, но в последнее время у Oracle иной подход — «новая Java раз в полгода». И вот, каждые полгода мы наблюдаем выпуск фич. Хорошо это или плохо — каждый видит по-своему. Например мне это не сильно нравится, так как у новых версий не так уж и много новых фич, но при этом версии растут, как грибы после дождя. Моргнул пару раз на проекте с Java 8, а там уже и Java 16 вышла (зато когда она выходит редко, происходит накопление новых фич, и в итоге это событие долгожданное, как праздник: все обсуждают новые плюшки и ты никак не пройдёшь мимо этого). Итак давайте начнём!

Java 8

Functional Interface

Методы с модификатором default позволяют добавлять новые методы в интерфейсы, не нарушая их существующую реализацию.

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

Методы static в интерфейсе работают так же, как и static методы в классе. Не забываем: наследовать static методы нельзя, как нельзя вызывать и static метод из класса-наследника.

Predicate — принимает аргументом некоторое значение T, возвращает boolean.

Пример: boolean someMethod(T t);

Consumer — принимает аргумент типа Т, ничего не возвращает (void).

Пример: void someMethod(T t);

Supplier — ничего не принимает на вход, но возвращает некоторое значение T.

Пример: T someMethod();

Function — принимает на вход параметр типа Т, возвращает значение типа R.

Пример: R someMethod(T t);

UnaryOperator — принимает аргумент Т и возвращает значение типа Т.

Пример: T someMethod(T t);

Stream

Lambda

foreach

Method reference

Ссылка на конструктор:

SomeObject obj = SomeObject::new

Ссылка на статический метод:

Ссылка на нестатический метод объекта определенного типа:

Ссылка на обычный(нестатический) метод конкретного объекта

API Time

  • LocalDate — это конкретная дата, как пример — 2010-01-09;
  • LocalTime — время, учитывающее часовой пояс — 19:45:55 (аналог LocalDate);
  • LocalDateTime — комбо LocalDate + LocalTime — 2020-01-04 15:37:47;
  • ZoneId — представляет часовые пояса;
  • Clock — с помощью этого типа можно достучаться до текущего времени и дате.
  • Java и время: часть первая и вторая на Хабре

Optional

  • Особенности Java 8: максимальное руководство на JavaRush — часть первая и вторая; ; ; .

Java 9

Из 8 в 13: полный обзор версий Java. Часть 1 - 4

Итак, 21 сентября 2017 года мир увидел JDK 9. Данная Java 9 поставляется с богатым набором функций. Хотя нет новых концепций языка, новые API и диагностические команды определенно будут интересны разработчикам.

JShell (REPL — read-eval-print loop)

Из 8 в 13: полный обзор версий Java. Часть 1 - 5

Это реализация в Java интерактивной консоли, которая используется для тестирования функционала и использования в консоли разных конструкций, например интерфейсов, классов, enum, операторов и т.д. Для запуска JShell нужно лишь написать в терминале — jshell. Далее можно писать все, что позволит нам фантазия: С помощью JShell можно создавать методы верхнего уровня и использовать их внутри той же сессии. Методы будут работать, как и статические методы, за исключением того, что ключевое слово static можно упустить Подробнее — в руководстве по Java 9. REPL (JShell).

Private

Модульность (Jigsaw)

  1. Языка программирования.
  2. Виртуальной машины.
  3. Стандартного java API.
    ; .

Immutable Collection

Другие нововведения:

  • расширен Optional (добавлены новые методы);
  • появились интерфейсы ProcessHandle и ProcessHandle для управления действиями операционной системы;
  • G1 — дефолтный сборщик мусора;
  • HTTP клиент с поддержкой как HTTP/2 протокола и WebSocket;
  • расширен Stream;
  • добавлен фреймворк Reactive Streams API (для реактивного программирования);
    на Хабре

Java 10

Из 8 в 13: полный обзор версий Java. Часть 1 - 6

Итак, спустя шесть месяцев после выпуска Java 9, в марте 2018 года (помню как вчера), на сцену выходит Java 10.

Java Versions and Features

You can use this guide to get practical information on how to find and install the latest Java, understand the differences between Java distributions (Adoptium, AdoptOpenJdk, OpenJDK, OracleJDK etc.), as well as get an overview of Java language features, including version Java versions 8-19.

Practical Information

First, let’s have a look at some common, practical questions that people have when trying to choose the right Java version for their project.

TL;DR I only want a download link and know about everything else. Where should I go?

Go to the Adoptium site, chose the latest Java version, download and install it. Then come back to this guide to maybe still learn a thing or two about Java versions.

What is the latest Java version?

As of September 2022, Java 19 is the latest released Java version. In March 2023, Java 20 will follow. The last long-term support version (LTS) of Java is Java 17, released in September 2021.

What Java version should I use?

Newer Java versions now follow every 6 months. Hence, Java 20 is scheduled for March 2023, Java 21 for September 2023 and so on. In the past, Java release cycles were much longer, up to 3-5 years. This graphic demonstrates that:

javaversions 6

With that many new versions coming out, there’s basically these real-world(™) usage scenarios:

Legacy projects in companies are often stuck with using Java 8 (see Why are companies still stuck with Java 8?) . Hence you will be forced to use Java 8 as well.

Some legacy projects are even stuck on Java 1.5 (released 2004) or 1.6 (released 2006) — sorry, folks, I feel for you!

If you are making sure to use the very latest IDEs, frameworks and build tools and starting a greenfield project, you can, without hesitation, use Java 17 (LTS) or even the very latest Java 19.

There’s the special field of Android development, where the Java version is basically stuck at Java 7, with a specific set of Java 8 features available. Or you switch to using the Kotlin programming language.

Why are companies still stuck with Java 8?

There’s a mix of different reasons companies are still stuck with Java 8. To name a few:

Build tools (Maven, Gradle etc.) and some libraries initially had bugs with versions Java versions > 8 and needed updates. For example, certain build tools like Maven would print out «reflective access»-warnings when building Java projects, which simply «felt not ready», even though the builds were fine.

Up until Java 8 you were pretty much using Oracle’s JDK builds and you did not have to care about licensing. Oracle changed the licensing scheme In 2019, though, which led the internet go crazy with a ton of articles saying «Java is not free anymore» — and a fair amount of confusion followed. This is however not really an issue, which you’ll learn about in the Java Distributions section of this guide.

Some companies have policies to only use LTS versions and rely on their OS vendors to provide them these builds, which takes time.

To sum up: you have a mix of practical issues (upgrading your tools, libraries, frameworks) and political issues.

Why are some Java versions, like 8 also called 1.8?

Java versions before 9 simply had a different naming scheme. So, Java 8 can also be called 1.8, Java 5 can be called 1.5 etc. When you issued the ‘java -version’ command, with these versions you got output like this:

Which simply means Java 8. With the switch to time-based releases with Java 9 the naming scheme also changed, and Java versions aren’t prefixed with 1.x anymore. Now the version number looks like this:

What is the difference between the Java versions? Should I learn a specific one?

Coming from other programming languages with major breakages between releases, like say Python 2 to 3, you might be wondering if the same applies to Java.

Java is special in this regard, as it is extremely backwards compatible. This means that your Java 5 or 8 program is guaranteed to run with a Java 8-19 virtual machine — with a few exceptions you don’t need to worry about for now.

It obviously does not work the other way around, say your program relies on Java 19 features, that are simply not available under a Java 8 JVM.

This means a couple of things:

You do not just «learn» a specific Java version, like 12.

Rather, you’ll get a good foundation in all language features up until Java 8. This serves as a good base.

And then learn, from a guide like this, what additional features came in Java 9-19 and use them whenever you can.

What are examples of these new features between Java versions?

Have a look at the Java Features 8-19 section.

But as a rule of thumb: The older, longer release-cycles (3-5 years, up until Java 8) meant a lot of new features per release.

The 6-month release cycle means a lot less features, per release, so you can catch up quickly on Java 9-19 language features.

What is the difference between a JRE and a JDK?

Up until now, we have only been talking about «Java». But what is Java exactly?

First, you need to differentiate between a JRE (Java Runtime Environment) and a JDK (Java Development Kit).

Historically, you downloaded just a JRE if you were only interested in running Java programs. A JRE includes, among other things, the Java Virtual Machine (JVM) and the «java» command line tool.

To develop new Java programs, you needed to download a JDK. A JDK includes everything the JRE has, as well as the compiler javac and a couple of other tools like javadoc (Java documentation generator) and jdb (Java Debugger).

Now why am I talking in past tense?

Up until Java 8, the Oracle website offered JREs and JDKs as separate downloads — even though the JDK also always included a JRE in a separate folder. With Java 9 that distinction was basically gone, and you are always downloading a JDK. The directory structure of JDKs also changed, with not having an explicit JRE folder anymore.

So, even though some distributions (see Java Distributions section) still offer a separate JRE download, there seems to be the trend of offering just a JDK. Hence, we are going to use Java and JDK interchangeably from now on.

How do I install Java or a JDK then?

Ignore the Java-Docker images, .msi wrappers or platform-specific packages for the moment. In the end, Java is just a .zip file, nothing more, nothing less.

Therefore, all you need to do to install Java onto your machine, is to unzip your jdk-<5-19>.zip file. You don’t even need administrator rights for that.

Your unzipped Java file will look like this:

The magic happens in the /bin directory, which under Windows looks like this:

So all you need to do is unzip that file and put the /bin directory in your PATH variable, so you can call the ‘java’ command from anywhere.

(In case you are wondering, GUI installers like the one from Oracle or Adoptium will do the unzipping and modifying the PATH variable for you, that’s about it.)

To verify you installed Java correctly, you can then simply run ‘java -version’. If the output looks like the one below, you are good to go.

Now there’s one question left: Where do you get that Java .zip file from? Which brings us to the topic of distributions.

Java Distributions

There’s a variety of sites offering Java (read: JDK) downloads and it is unclear «who offers what and with which licensing». This section will shed some light on this.

The OpenJDK project

In terms of Java source code (read: the source code for your JRE/JDK), there is only one, living at the OpenJDK project site.

This is just source code however, not a distributable build (think: your .zip file with the compiled java command for your specific operating system). In theory, you and I could produce a build from that source code, call it, say, MarcoJDK and start distributing it. But our distribution would lack certification, to be able to legally call ourselves Java SE compatible.

That’s why in practice, there’s a handful of vendors that actually create these builds, get them certified (see TCK) and then distribute them.

And while vendors cannot, say, remove a method from the String class before producing a new Java build, they can add branding (yay!) or add some other (e.g. CLI) utilities they deem useful. But other than that, the original source code is the same for all Java distributions.

OpenJDK builds (by Oracle) and OracleJDK builds

One of the vendors who builds Java from source is Oracle. This leads to two different Java distributions, which can be very confusing at first.

OpenJDK builds by Oracle(!). These builds are free and unbranded, but Oracle won’t release updates for older versions, say Java 15, as soon as Java 16 comes out.

OracleJDK, which is a branded, commercial build starting with the license change in 2019. Which means it can be used for free during development, but you need to pay Oracle if using it in production. For this, you get longer support, i.e. updates to versions and a telephone number you can call if your JVM goes crazy.

Now, historically (pre-Java 8) there were actual source differences between OpenJDK builds and OracleJDK builds, where you could say that OracleJDK was ‘better’. But as of today, both versions are essentially the same, with minor differences.

It then boils down to you wanting paid, commercial support (a telephone number) for your installed Java version.

Adoptium’s Eclipse Temurin (formerly AdoptOpenJDK)

In 2017, a group of Java User Group members, developers and vendors (Amazon, Microsoft, Pivotal, Redhat and others) started a community, called AdoptOpenJDK. As of August 2021, the AdoptOpenJDK project moved to a new home and is now called the Eclipse Adoptium project.

Adoptium provides free, rock-solid OpenJDK builds, called Eclipse Temurin , with longer availibility/updates, across a variety of operating systems, architectures and versions.

Highly recommended if you are looking to install Java.

Azul Zulu, Amazon Corretto, SAPMachine

You will find a complete list of OpenJDK builds at the OpenJDK Wikipedia site. Among them are Azul Zulu, Amazon Corretto as well as SapMachine, to name a few. To oversimplify it boils down to you having different support options/maintenance guarantees.

Still, if you’re, for example, working on AWS, it makes sense to just go with their Amazon Corretto OpenJDK builds, provided they offer the version you want to use.

A Complete OpenJDK Distribution Overview

Rafael Winterhalter compiled a great list of all available OpenJDK builds, including their OS, architecture, licensing, support and maintenance windows.

Recommendation

To re-iterate from the beginning, in 2022 and 2023, unless you have very specific requirements, go get your jdk.zip (.tar.gz/.msi/.pkg) file from https://adoptium.net (called Eclipse Temurin ) or choose a package provided by your OS-vendor / cloud-provider.

Java Features 8-19

As mentioned at the very beginning of this guide: Essentially all (don’t be picky now) Java 8 language features also work in Java 19. The same goes for all other Java versions in between.

Which in turns means that all language features from Java 8 serve as very good Java base knowledge and everything else (Java 9-19) is pretty much additional features on top of that baseline.

Here’s a quick overview of what the specific versions have to offer:

— Java 8 —

Java 8 was a massive release and you can find a list of all features at the Oracle website. There’s two main feature sets I’d like to mention here, though:

Language Features: Lambdas etc.

Before Java 8, whenever you wanted to instantiate, for example, a new Runnable, you had to write an anonymous inner class like so:

With lambdas, the same code looks like this:

You also got method references, repeating annotations, default methods for interfaces and a few other language features.

Collections & Streams

In Java 8 you also got functional-style operations for collections, also known as the Stream API. A quick example:

Now pre-Java 8 you basically had to write for-loops to do something with that list.

With the Streams API, you can do the following:

If you want more Java 8 practice

Obviously, I can only give a quick overview of each newly added Stream, Lambda or Optional method in Java 8 in the scope of this guide.

If you want a more detailed, thorough overview — including exercises — you can have a look at my Java 8 core features course.

— Java 9 —

Java 9 also was a fairly big release, with a couple of additions:

Collections

Collections got a couple of new helper methods, to easily construct Lists, Sets and Maps.

Streams

Streams got a couple of additions, in the form of takeWhile,dropWhile,iterate methods.

Optionals

Optionals got the sorely missed ifPresentOrElse method.

Interfaces

Interfaces got private methods:

Other Language Features

And a couple of other improvements, like an improved try-with-resources statement or diamond operator extensions.

JShell

Finally, Java got a shell where you can try out simple commands and get immediate results.

HTTPClient

Java 9 brought the initial preview version of a new HttpClient. Up until then, Java’s built-in Http support was rather low-level, and you had to fall back on using third-party libraries like Apache HttpClient or OkHttp (which are great libraries, btw!).

With Java 9, Java got its own, modern client — although in preview mode, which means subject to change in later Java versions.

Project Jigsaw: Java Modules and Multi-Release Jar Files

Java 9 got the Jigsaw Module System, which somewhat resembles the good old OSGI specification. It is not in the scope of this guide to go into full detail on Jigsaw, but have a look at the previous links to learn more.

Multi-Release .jar files made it possible to have one .jar file which contains different classes for different JVM versions. So your program can behave differently/have different classes used when run on Java 8 vs. Java 10, for example.

If you want more Java 9 practice

Again, this is just a quick overview of Java 9 features and if you want more thorough explanations and exercises, have a look at the Java 9 core features course.

— Java 10 —

There have been a few changes to Java 10, like Garbage Collection etc. But the only real change you as a developer will likely see is the introduction of the «var»-keyword, also called local-variable type inference.

Local-Variable Type Inference: var-keyword

Feels Javascript-y, doesn’t it? It is still strongly typed, though, and only applies to variables inside methods (thanks, dpash, for pointing that out again).

— Java 11 —

Java 11 was also a somewhat smaller release, from a developer perspective.

Strings & Files

Strings and Files got a couple new methods (not all listed here):

Run Source Files

Starting with Java 10, you can run Java source files without having to compile them first. A step towards scripting.

Local-Variable Type Inference (var) for lambda parameters

The header says it all:

HttpClient

The HttpClient from Java 9 in its final, non-preview version.

Other stuff

Flight Recorder, No-Op Garbage Collector, Nashorn-Javascript-Engine deprecated etc.

— Java 12 —

Java 12 got a couple new features and clean-ups, but the only ones worth mentioning here are Unicode 11 support and a preview of the new switch expression, which you will see covered in the next section.

— Java 13 —

You can find a complete feature list here, but essentially you are getting Unicode 12.1 support, as well as two new or improved preview features (subject to change in the future):

Switch Expression (Preview)

Switch expressions can now return a value. And you can use a lambda-style syntax for your expressions, without the fall-through/break issues:

[Перевод] Руководство по возможностям Java версий 8-16

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

Примечание переводчика17 февраля 2020 г. был опубликован перевод Руководство по версиям и возможностям Java.

Вашему вниманию предлагается обновленная версия руководства от 05 апреля 2021 г.

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

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

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

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

TL;DR (англ. too long; didn’t read — слишком длинно, не читал)

Какая последняя версия Java?

По состоянию на март 2021 года Java 16 является последней выпущенной версией Java.

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

Новые версии Java теперь выходят каждые 6 месяцев. Следовательно, Java 17 запланирован на сентябрь 2021 года, Java 18 — на мар 2022 года и так далее. В прошлом циклы выпуска Java были намного длиннее, до 3-5 лет. Этот график демонстрирует, это:

Поскольку выходит так много новых версий, существуют в действительности имеются следующие сценарии использования:

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

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

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

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

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

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

Инструменты сборки (Maven, Gradle и т. д.) и некоторые библиотеки изначально содержали ошибки с версиями Java > 8 и нуждались в обновлениях. Даже сегодня, например, с Java9+, некоторые инструменты сборки выводят предупреждения «reflective access» при сборке проектов Java, которые просто «кажутся не готовыми», даже если сборки в порядке.

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

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

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

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

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

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

В чем разница между версиями Java?

Должен ли я изучать конкретную?

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

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

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

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

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

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

И затем, из этого руководства вы можете узнать, какие дополнительные функции появились в Java 9-16, чтобы использовать их всегда, когда это возможно.

Каковы примеры этих новых возможностей новых версий Java?

Взгляните на раздел «Возможности Java 8-16» ниже.

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

Шестимесячный цикл выпуска означает меньшее количество функций на выпуск, поэтому вы можете быстро освоить языковые функции Java 9-16.

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

До сих пор мы говорили только о Java. Но что именно означает «Java»?

Во-первых, вам нужно провести различие между JRE (Java Runtime Environment) и JDK (Java Development Kit).

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

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

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

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

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

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

На данный момент не обращайте внимания на образы Java-Docker, оболочки .msi или пакеты для конкретной платформы. В конце концов, Java — это просто файл .zip, ни больше, ни меньше.

Поэтому все, что вам нужно сделать, чтобы установить Java на свой компьютер, — это разархивировать файл jdk-<5-16>.zip. Вам даже не нужны права администратора для этого.

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

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

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

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

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

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

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

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

Проект OpenJDK

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

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

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

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

Сборки OpenJDK (от Oracle) и OracleJDK

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

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

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

Исторически (до Java 8) существовали реальные исходные различия между сборками OpenJDK и сборками OracleJDK, при этом можно было сказать, что OracleJDK был «лучше». Но на сегодняшний день обе версии практически одинаковы, с небольшими отличиями.

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

AdoptOpenJDK

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

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

Я очень рекомендую ее, если вы хотите установить Java.

Azul Zulu, Amazon Corretto, SAPMachine

Полный список сборок OpenJDK вы найдете на сайте OpenJDK Wikipedia. Среди них Azul Zulu, Amazon Corretto, а также SapMachine и многие другие. Упрощенно говоря, различия сводятся к тому, что у вас есть различные варианты поддержки/ гарантии обслуживания.

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

Полный обзор дистрибутива OpenJDK

Рафаэль Винтерхальтер (Rafael Winterhalter) собрал большой список всех доступных сборок OpenJDK, включая их описания: ОС, архитектуру, окна лицензирования, поддержки и обслуживания.

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

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

Возможности Java 8-16

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

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

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

— Java 8 —

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

Особенности языка: лямбды и т. д.

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

С лямбдами тот же код выглядит так:

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

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

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

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

С помощью API Streams вы можете сделать следующее:

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

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

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

— Java 9 —

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

Коллекции

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

Streams

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

Optionals

Optionals получили метод ifPresentOrElse, которого очень не хватало.

Интерфейсы

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

Другие возможности языка

И пара других улучшений, таких как улучшенный оператор try-with-resources или расширения diamond оператора.

JShell

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

HTTPClient

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

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

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

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

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

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

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

— Java 10 —

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

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

Чувствуете себя как в Javascript-е, не так ли? Однако Java все еще строго типизирован и var применяется только к переменным внутри методов (спасибо, dpash, за то, что снова указали на это).

— Java 11 —

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

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

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

Запустить исходные файлы

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

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

В заголовке сказано все:

HttpClient

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

Другие вкусности

Flight Recorder (Регистратор полетов), сборщик мусора No-Op, Nashorn-Javascript-Engine объявлен deprecated (устаревшим) и т.д.

— Java 12 —

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

— Java 13 —

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

Switch выражение (Preview — предварительная версия)

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

Старые операторы switch выглядели так:

В то время как в Java 13 операторы switch могут выглядеть так:

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

Наконец-то, вы можете сделать это на Java:

Java 14 и далее

Switch выражения (стандартное)

Switch выражения, которые были превью функцией в версиях 12 и 13, теперь стандартизированы.

Records (Записи — превью)

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

Взгляните на этот класс до Java 14, который содержит только данные, (потенциально) методы получения / установки, equals / hashcode, toString.

С записями теперь это можно записать так:

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

Полезные исключения NullPointerExceptions

Наконец, исключения NullPointerExceptions описывают, какая именно переменная имела значение NULL.

Сопоставление с образцом для InstanceOf (предварительная версия)

Раньше вам приходилось выполнять cast ваших объектов внутри instanceof следующим образом:

Теперь вы можете сделать это, эффективно сбросив гипс.

Инструмент для упаковки (инкубатор)

Существует инструмент jpackage (инкубатор), который позволяет упаковать ваше Java-приложение в пакеты для конкретной платформы, включая все необходимые зависимости.

Linux: deb и rpm

macOS: pkg и dmg

Windows: msi и exe

Сборщики мусора

Сборщик мусора Concurrent Mark Sweep (CMS) был удален, и был добавлен экспериментальный сборщик мусора Z.

Java 15

Текстовые блоки / многострочные строки

Представленные в качестве экспериментальной функции в Java 13 (см. Выше), многострочные тексты теперь готовы к работе.

Запечатанные (sealed) классы — превью

Если вы когда-либо хотели иметь еще более четкое представление о том, кому разрешено создавать подклассы ваших классов, теперь есть такая sealed функция.

Это означает, что пока класс есть public , только классы, которым разрешено создавать подклассы, Shape это Circle , Rectangle и Square .

Записи и сопоставление с образцом

Функции Records и Pattern Matching из Java 14 (см. Выше) все еще находятся в предварительной версии и еще не доработаны.

Движок JavaScript Rhinoceros

После устаревания в Java 11 механизм Nashorn Javascript Engine был окончательно удален в JDK 15.

ZGC: готово к продакшн

Z Garbage Collector не маркирован экспериментальное больше. Теперь он готов к использованию в продакшн.

Java 16

Каналы сокетов домена Unix

Теперь вы можете подключаться к сокетам домена Unix (также поддерживаются macOS и Windows (10+).

API стороннего компоновщика — превью

Планируемая замена JNI (Java Native Interface), позволяющая выполнять привязку к собственным библиотекам (подумайте о C).

Записи и сопоставление с образцом

Обе функции теперь готовы к продакшн и больше не отмечены in preview .

Запечатанные классы

Запечатанные классы (начиная с Java 15, см. Выше) все еще находятся в предварительной версии.

Java 17 и новее

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

Заключение

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

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

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

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

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

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

Благодарности

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *