Java Version and Feature Guide

It has everything you need to know about the various versions and features of Java.



Java 8, Java 11, Java 13 - what's the difference?


You can use this guide to find and install the latest version of Java, understand the differences between Java distributions (AdoptOpenJdk, OpenJDK, OracleJDK, etc.), and also get an overview of Java features, including Java versions 8-13.


Translator’s Note
On April 9, 2020, Marco published a new version of the Guide, which adds a description of Java 14. The
translation of the new version of the Guide is brought to your attention.


-, , Java .


, AdoptOpenJDK, 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 9+, «reflective access» Java, « », .
  • Java 8 JDK- Oracle, . 2019 Oracle , , , , «Java », — . , « Java» .
  • , LTS, , .

, ( , , ) .


Java 1.X?


Java 9 . , Java 8 1.8, Java 5 1.5 .. java -version , :


c:\Program Files\Java\jdk1.8.0_191\bin>java -version
java version "1.8.0_191" (1)
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 (1)
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, Java 8 JVM.


:


  • «» Java, Java 12.
  • , Java 8.
  • , , Java 9-13, , .

Java?


« Java 8-13» .


, : , (3-5 , Java 8) .


, Java 9-13.


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-13}.zip. .


Java :


Directory C:\dev\jdk-11
12.11.2019  19:24    <DIR>          .
12.11.2019  19:24    <DIR>          ..
12.11.2019  19:23    <DIR>          bin
12.11.2019  19:23    <DIR>          conf
12.11.2019  19:24    <DIR>          include
12.11.2019  19:24    <DIR>          jmods
22.08.2018  19:18    <DIR>          legal
12.11.2019  19:24    <DIR>          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 -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)

: .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, .


  1. OpenJDK Oracle (!). , Oracle , , Java 13, Java 14.
  2. 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, https://sap.imtqy.com/SapMachine/ . , , / .


, .



, 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 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<String> 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 9


Java 9 , :



, .


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

Streams


, takeWhile, dropWhile iterate.


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

Optionals


Optionals ifPresentOrElse, .


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


private :


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


, try-with-resources diamond .


JShell


, Java , .


% jshell
|  Welcome to JShell -- Version 9
|  For an introduction type: /help intro
jshell> int x = 10
x ==> 10

HTTPClient


Java 9 HttpClient. Http Java , , Apache HttpClient OkHttp (, ).


Java 9 Java — , , Java.


Jigsaw: Java Jar


Java 9 Jigsaw Module System, - OSGI. Jigsaw — , .


Multi-Release .jar .jar, JVM. , - / , Java 8 Java 10, .


Java 10


Java 10 , .. , , , , , — var, .


: var


// Pre-Java 10
String myName = "Marco";
// With Java 10
var myName = "Marco"

Javascript-, ? Java var (, dpash, , ).


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 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(status) {
  case SUBSCRIBER:
    // code block
    break;
  case FREE_TRIAL:
    // code block
    break;
  default:
    // code block
}

Java 13 switch :


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

()


- Java:


String htmlBeforeJava13 = "<html>\n" +
              "    <body>\n" +
              "        <p>Hello, world</p>\n" +
              "    </body>\n" +
              "</html>\n";
String htmlWithJava13 = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;

Java 14


, . !



:



, ! .


!


,


This article originally appeared on the site as part of a series of guides on modern Java programming. To find more manuals, visit the website or subscribe to our newsletter to receive notifications of recently published manuals: https://bit.ly/2K0Ao4F .


Acknowledgments


Stephen Coleburn wrote a fantastic article about the various Java distributions available. Thanks Steven!


Additional reading


JVM Ecosystem Survey: Why Devs Aren't Switching to Java 11


Beyond Java 8


When Will Java 11 Replace Java 8 as the Default Java?


All Articles