ืžื”ื“ื•ืจืช Java SE 14

ืœืื—ืจ ืฉื™ืฉื” ื—ื•ื“ืฉื™ื ืฉืœ ืคื™ืชื•ื—, ืื•ืจืงืœ ืฉื•ื—ืจืจ ืคืœื˜ืคื•ืจืžื” Java SE 14 (Java Platform, Standard Edition 14), ืคืจื•ื™ืงื˜ OpenJDK ื‘ืงื•ื“ ืคืชื•ื— ืžืฉืžืฉ ื›ื™ื™ืฉื•ื ื™ื™ื—ื•ืก. Java SE 14 ืฉื•ืžืจ ืขืœ ืชืื™ืžื•ืช ืœืื—ื•ืจ ืขื ืžื”ื“ื•ืจื•ืช ืงื•ื“ืžื•ืช ืฉืœ ืคืœื˜ืคื•ืจืžืช Java; ื›ืœ ืคืจื•ื™ืงื˜ื™ Java ืฉื ื›ืชื‘ื• ื‘ืขื‘ืจ ื™ืคืขืœื• ืœืœื ืฉื™ื ื•ื™ื™ื ื›ืืฉืจ ื™ื•ืฉืงื• ืชื—ืช ื”ื’ืจืกื” ื”ื—ื“ืฉื”. ืžื•ื›ื ื™ื ืœื”ืชืงื ื” ืฉืœ Java SE 14 build (JDK, JRE ื•- Server JRE) ืžื•ึผื›ึธืŸ ืขื‘ื•ืจ Linux (x86_64), Windows ื•-macOS. ื”ื˜ืžืขืช ืขื–ืจ ืฉืคื•ืชื—ื” ืขืœ ื™ื“ื™ ืคืจื•ื™ืงื˜ OpenJDK Java 14 ื”ื•ื ืงื•ื“ ืคืชื•ื— ืœื—ืœื•ื˜ื™ืŸ ืชื—ืช ืจื™ืฉื™ื•ืŸ GPLv2, ืขื ื—ืจื™ื’ื™ื ืฉืœ GNU ClassPath ื”ืžืืคืฉืจื™ื ืงื™ืฉื•ืจ ื“ื™ื ืžื™ ืขื ืžื•ืฆืจื™ื ืžืกื—ืจื™ื™ื.

Java SE 14 ืžืกื•ื•ื’ืช ื›ื’ืจืกืช ืชืžื™ื›ื” ื›ืœืœื™ืช ื•ืชืžืฉื™ืš ืœืงื‘ืœ ืขื“ื›ื•ื ื™ื ืขื“ ื”ืžื”ื“ื•ืจื” ื”ื‘ืื”. ืขื ืฃ ื”ืชืžื™ื›ื” ืœื˜ื•ื•ื— ืืจื•ืš (LTS) ืฆืจื™ืš ืœื”ื™ื•ืช Java SE 11, ืฉื™ืžืฉื™ืš ืœืงื‘ืœ ืขื“ื›ื•ื ื™ื ืขื“ 2026. ืกื ื™ืฃ ื”-LTS ื”ืงื•ื“ื ืฉืœ Java 8 ื™ื”ื™ื” ื ืชืžืš ืขื“ ื“ืฆืžื‘ืจ 2020. ืžื”ื“ื•ืจืช ื”-LTS ื”ื‘ืื” ืžืชื•ื›ื ื ืช ืœืกืคื˜ืžื‘ืจ 2021. ื ื–ื›ื™ืจ ืœื›ื ืฉื”ื—ืœ ืžื”ืฉื—ืจื•ืจ ืฉืœ Java 10, ื”ืคืจื•ื™ืงื˜ ืขื‘ืจ ืœืชื”ืœื™ืš ืคื™ืชื•ื— ื—ื“ืฉ, ืžื” ืฉืžืจืžื– ืขืœ ืžื—ื–ื•ืจ ืงืฆืจ ื™ื•ืชืจ ืœื”ื™ื•ื•ืฆืจื•ืช ืžื”ื“ื•ืจื•ืช ื—ื“ืฉื•ืช. ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื—ื“ืฉื” ืžืคื•ืชื—ืช ื›ืขืช ื‘ืกื ื™ืฃ ืžืืกื˜ืจ ืื—ื“ ื”ืžืชืขื“ื›ืŸ ื›ืœ ื”ื–ืžืŸ, ื”ื›ื•ืœืœ ืฉื™ื ื•ื™ื™ื ืžื•ื›ื ื™ื ื•ืžืžื ื• ืžืกืชืขืคื™ื ืกื ื™ืคื™ื ื›ืœ ื—ืฆื™ ืฉื ื” ื›ื“ื™ ืœื™ื™ืฆื‘ ืžื”ื“ื•ืจื•ืช ื—ื“ืฉื•ืช.

ืฉืœ ื—ื™ื“ื•ืฉื™ื Java 14 ืื—ื“ ื™ื›ื•ืœ ืกื™ืžืŸ:

  • ื ื•ืกืคื” ืชืžื™ื›ื” ื ื™ืกื™ื•ื ื™ืช ื”ืชืืžืช ืชื‘ื ื™ืช ื‘ืื•ืคืจื˜ื•ืจ "instanceof", ื”ืžืืคืฉืจ ืœืš ืœื”ื’ื“ื™ืจ ืžื™ื“ ืžืฉืชื ื” ืžืงื•ืžื™ ื›ื“ื™ ืœื’ืฉืช ืœืขืจืš ื”ืžืกื•ืžืŸ. ืœื“ื•ื’ืžื”, ืืชื” ื™ื›ื•ืœ ืžื™ื“ ืœื›ืชื•ื‘ "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" ืžื‘ืœื™ ืœื”ื’ื“ื™ืจ ื‘ืžืคื•ืจืฉ "String s = (String) obj".

    ื–ื” ื”ื™ื”:

    if (instanceof Group) {
    ืงื‘ื•ืฆืช ืงื‘ื•ืฆื” = (Group)obj;
    var entries = group.getEntries();
    }

    ืขื›ืฉื™ื• ืืชื” ื™ื›ื•ืœ ืœื”ืกืชื“ืจ ื‘ืœื™ ื”ื”ื’ื“ืจื” "ืงื‘ื•ืฆื” ืงื‘ื•ืฆืชื™ืช = (ืงื‘ื•ืฆืช) obj":

    if (ืžื•ืคืข ืื•ื‘ื™ื™ืงื˜ ืฉืœ ืงื‘ื•ืฆืช ืงื‘ื•ืฆื”) {
    var entries = group.getEntries();
    }

  • ื ื•ืกืคื” ืชืžื™ื›ื” ื ื™ืกื™ื•ื ื™ืช ืขื‘ื•ืจ ืžื™ืœืช ื”ืžืคืชื— ื”ื—ื“ืฉื” "ืฉื™ื", ื”ืžืกืคืง ื˜ื•ืคืก ืงื•ืžืคืงื˜ื™ ืœื”ื’ื“ืจืช ืžื—ืœืงื•ืช, ื”ืžืืคืฉืจ ืœืš ืœื”ื™ืžื ืข ืžื”ื’ื“ืจื” ืžืคื•ืจืฉืช ืฉืœ ืฉื™ื˜ื•ืช ืฉื•ื ื•ืช ื‘ืจืžื” ื ืžื•ื›ื” ื›ื’ื•ืŸ equals(), hashCode() ื•-toString() ื‘ืžืงืจื™ื ื‘ื”ื ื”ื ืชื•ื ื™ื ืžืื•ื—ืกื ื™ื ืจืง ื‘ืฉื“ื•ืช ืฉื”ืชื ื”ื’ื•ืชื ืื™ื ื” ืžืฉืชื ื”. ื›ืืฉืจ ืžื—ืœืงื” ืžืฉืชืžืฉืช ื‘ืžื™ืžื•ืฉื™ื ืกื˜ื ื“ืจื˜ื™ื™ื ืฉืœ ื”ืžืชื•ื“ื•ืช equals(), hashCode() ื•-toString(), ื”ื™ื ื™ื›ื•ืœื” ืœื”ืกืชื“ืจ ืœืœื ื”ื”ื’ื“ืจื” ื”ืžืคื•ืจืฉืช ืฉืœื”ืŸ:

    ืจืฉื•ืžื” ืฆื™ื‘ื•ืจื™ืช BankTransaction(LocalDate date,
    ื›ืžื•ืช ื›ืคื•ืœื”
    ืชื™ืื•ืจ ืžื—ืจื•ื–ืช) {}

    ื”ื”ืฆื”ืจื” ื”ื–ื• ืชื•ืกื™ืฃ ืื•ื˜ื•ืžื˜ื™ืช ืžื™ืžื•ืฉื™ื ืฉืœ ื”ืžืชื•ื“ื•ืช equals(), hashCode() ื•-toString() ื‘ื ื•ืกืฃ ืœืฉื™ื˜ื•ืช ื”ื‘ื ืื™ ื•ื”-getter.

  • ืžึฐืชื•ึผืงื ึธืŸ ื•ืชืžื™ื›ื” ื‘ืฆื•ืจื” ื—ื“ืฉื” ืฉืœ ื‘ื™ื˜ื•ื™ื™ "ื‘ื•ืจืจ" ืžื•ืคืขืœืช ื›ื‘ืจื™ืจืช ืžื—ื“ืœ, ืฉืื™ื ื” ื“ื•ืจืฉืช ืฆื™ื•ืŸ ื”ืื•ืคืจื˜ื•ืจ "break", ืžืืคืฉืจืช ืœืฉืœื‘ ืชื•ื•ื™ื•ืช ื—ื•ื–ืจื•ืช ื•ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื” ืœื ืจืง ื‘ืฆื•ืจื” ืฉืœ ืื•ืคืจื˜ื•ืจ, ืืœื ื’ื ื‘ืชื•ืจ ืื•ืคืจื˜ื•ืจ. ื‘ื™ื˜ื•ื™.

    var log = switch (event) {
    ืžืงืจื” PLAY -> "ื”ืžืฉืชืžืฉ ื”ืคืขื™ืœ ืืช ืœื—ืฆืŸ ื”ื”ืคืขืœื”";
    ืžืงืจื” STOP, PAUSE -> "ื”ืžืฉืชืžืฉ ืฆืจื™ืš ื”ืคืกืงื”";
    ื‘ืจื™ืจืช ืžื—ื“ืœ -> {
    ื”ื•ื“ืขื” ืžื—ืจื•ื–ืช = event.toString();
    LocalDateTime now = LocalDateTime.now();
    ืชืฉื•ืื” "ืื™ืจื•ืข ืœื ื™ื“ื•ืข" + ื”ื•ื“ืขื” +
    ยป ืžื—ื•ื‘ืจ ยป + ืขื›ืฉื™ื•;
    }
    };

  • ืชืžื™ื›ื” ื ื™ืกื™ื•ื ื™ืช ืžื•ืจื—ื‘ืช ื‘ืœื•ืงื™ื ืฉืœ ื˜ืงืกื˜ - ืฆื•ืจื” ื—ื“ืฉื” ืฉืœ ืžื™ืœื•ืœื™ืช ืžื—ืจื•ื–ืช ื”ืžืืคืฉืจืช ืœื›ืœื•ืœ ื ืชื•ื ื™ ื˜ืงืกื˜ ืžืจื•ื‘ื™ ืฉื•ืจื•ืช ื‘ืงื•ื“ ื”ืžืงื•ืจ ืžื‘ืœื™ ืœื”ืฉืชืžืฉ ื‘ื‘ืจื™ื—ืช ืชื•ื•ื™ื ื•ืฉื™ืžื•ืจ ืขื™ืฆื•ื‘ ื”ื˜ืงืกื˜ ื”ืžืงื•ืจื™ ื‘ื‘ืœื•ืง. ื”ื‘ืœื•ืง ืžืžื•ืกื’ืจ ืขืœ ื™ื“ื™ ืฉืœื•ืฉ ืžืจื›ืื•ืช ื›ืคื•ืœื•ืช. ื‘-Java 14, ื‘ืœื•ืงื™ ื˜ืงืกื˜ ืชื•ืžื›ื™ื ื›ืขืช ื‘ืจืฆืฃ ื”ื‘ืจื™ื—ื” "\s" ื›ื“ื™ ืœื”ื’ื“ื™ืจ ืจื•ื•ื— ื‘ื•ื“ื“ ื•-"\" ืœืฉืจืฉื•ืจ ืขื ื”ืฉื•ืจื” ื”ื‘ืื” (ื”ืชืขืœืžื•ืช ืžืฉื•ืจื•ืช ื—ื“ืฉื•ืช ื›ืฉืฆืจื™ืš ืœื”ื“ืคื™ืก ืฉื•ืจื” ืืจื•ื›ื” ืžืื•ื“). ืœืžืฉืœ, ื‘ืžืงื•ื ืงื•ื“

    ืžื—ืจื•ื–ืช html = " ยป+
    "\n\t" + " ยป+
    "\n\t\t" + " \"Java 1 ื›ืืŸ!\" ยป+
    "\n\t" + " ยป+
    "\n" + " ";

    ืืชื” ื™ื›ื•ืœ ืœืฆื™ื™ืŸ:

    ืžื—ืจื•ื–ืช html = """


    ยปJava 1\
    ื›ืืŸ!

    """;

  • ืชื•ื›ืŸ ื”ืžื™ื“ืข ืฉืœ ืื‘ื—ื•ืŸ ื›ืืฉืจ ืžืชืจื—ืฉื™ื ื—ืจื™ื’ื™ื ื”ื•ืจื—ื‘ NullPointerException. ื‘ืขื•ื“ ืฉืงื•ื“ื ืœื›ืŸ ื”ื•ื“ืขืช ื”ืฉื’ื™ืื” ื”ืชื™ื™ื—ืกื” ืจืง ืœืžืกืคืจ ื”ืฉื•ืจื”, ื›ืขืช ื”ื™ื ืžืคืจื˜ืช ืื™ื–ื• ืฉื™ื˜ื” ื’ืจืžื” ืœื—ืจื™ื’ื”. ืื‘ื—ื•ืŸ ืžืชืงื“ื ื–ืžื™ืŸ ื›ืขืช ืจืง ื›ืืฉืจ ื”ื•ื ืžื•ืคืขืœ ืขื ื”ื“ื’ืœ "-XX:+ShowCodeDetailsInExceptionMessages". ืœื“ื•ื’ืžื”, ื‘ืขืช ืฆื™ื•ืŸ ื”ื“ื’ืœ ื”ื–ื”, ื”ื—ืจื™ื’ ื‘ืฉื•ืจื”

    var name = user.getLocation().getCity().getName();

    ื™ื‘ื™ื ืœื”ื•ื“ืขื”

    ื—ืจื™ื’ ื‘ืฉืจืฉื•ืจ "main" java.lang.NullPointerException: ืœื ื ื™ืชืŸ ืœื”ืคืขื™ืœ ืืช "Location.getCity()"
    ืžื›ื™ื•ื•ืŸ ืฉืขืจืš ื”ื”ื—ื–ืจ ืฉืœ "User.getLocation()" ื”ื•ื null
    ื‘-NullPointerExample.main(NullPointerExample.java:5):5)

    ืžื” ืฉืžื‘ื”ื™ืจ ืฉืฉื™ื˜ืช Location.getCity() ืœื ื ืงืจืื” ื•-User.getLocation() ื”ื—ื–ื™ืจื” null.

  • ืžื•ื˜ืžืข ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ืฉืœ ื›ืœื™ ื”ืฉื™ืจื•ืช jpackage, ื”ืžืืคืฉืจ ืœืš ืœื™ืฆื•ืจ ื—ื‘ื™ืœื•ืช ืขื‘ื•ืจ ื™ื™ืฉื•ืžื™ Java ืขืฆืžืื™ื™ื. ื›ืœื™ ื”ืฉื™ืจื•ืช ืžื‘ื•ืกืก ืขืœ javapackager ืž-JavaFX ื•ืžืืคืฉืจ ืœื™ืฆื•ืจ ื—ื‘ื™ืœื•ืช ื‘ืคื•ืจืžื˜ื™ื ืžืงื•ืจื™ื™ื ืœืคืœื˜ืคื•ืจืžื•ืช ืฉื•ื ื•ืช (msi ื•-exe ืขื‘ื•ืจ Windows, pkg ื•-dmg ืขื‘ื•ืจ macOS, deb ื•-rpm ืขื‘ื•ืจ Linux). ื”ื—ื‘ื™ืœื•ืช ื›ื•ืœืœื•ืช ืืช ื›ืœ ื”ืชืœื•ืช ื”ื ื“ืจืฉืช.
  • ืœืืกืคืŸ ื”ืืฉืคื” G1 ื”ื•ืกื™ืฃ ืžื ื’ื ื•ืŸ ื”ืงืฆืืช ื–ื™ื›ืจื•ืŸ ื—ื“ืฉ ืฉืœื•ืงื— ื‘ื—ืฉื‘ื•ืŸ ืืช ื”ืคืจื˜ื™ื ื”ืกืคืฆื™ืคื™ื™ื ืฉืœ ืขื‘ื•ื“ื” ืขืœ ืžืขืจื›ื•ืช ื’ื“ื•ืœื•ืช ื‘ืืžืฆืขื•ืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” NUMA. ืžืงืฆื” ื”ื–ื™ื›ืจื•ืŸ ื”ื—ื“ืฉ ืžื•ืคืขืœ ื‘ืืžืฆืขื•ืช ื”ื“ื’ืœ "+XX:+UseNUMA" ื•ื™ื›ื•ืœ ืœืฉืคืจ ืžืฉืžืขื•ืชื™ืช ืืช ื”ื‘ื™ืฆื•ืขื™ื ื‘ืžืขืจื›ื•ืช NUMA.
  • ื ื•ืกืฃ API ืœื ื™ื˜ื•ืจ ืชื•ืš ื›ื“ื™ ื˜ื™ืกื” ืฉืœ ืื™ืจื•ืขื™ JFR (JDK Flight Recorder), ืœืžืฉืœ ืœืืจื’ื•ืŸ ื ื™ื˜ื•ืจ ืจืฆื™ืฃ.
  • ื ื•ืกืฃ ืžื•ื“ื•ืœ jdk.nio.mapmode, ื”ืžืฆื™ืข ืžืฆื‘ื™ื ื—ื“ืฉื™ื (READ_ONLY_SYNC, WRITE_ONLY_SYNC) ืœื™ืฆื™ืจืช ืžืื’ืจื™ ื‘ืชื™ื ืžืžื•ืคื™ื (MappedByteBuffer) ื”ืžืชื™ื™ื—ืกื™ื ืœื–ื™ื›ืจื•ืŸ ืœื ื ื“ื™ืฃ (NVM).
  • ืžื•ื˜ืžืข ืชืฆื•ื’ื” ืžืงื“ื™ืžื” ืฉืœ ื”-API ืฉืœ Foreign-Memory Access, ื”ืžืืคืฉืจืช ืœื™ื™ืฉื•ืžื™ Java ืœื’ืฉืช ื‘ืฆื•ืจื” ืžืื•ื‘ื˜ื—ืช ื•ื™ืขื™ืœื” ืœืื–ื•ืจื™ ื–ื™ื›ืจื•ืŸ ืžื—ื•ืฅ ืœืขืจืžืช Java ืขืœ ื™ื“ื™ ืžื ื™ืคื•ืœืฆื™ื” ืฉืœ ื”ื”ืคืฉื˜ื•ืช ื”ื—ื“ืฉื•ืช ืฉืœ MemorySegment, MemoryAddress ื•-MemoryLayout.
  • ื”ื•ื›ืจื– ื™ืฆื™ืื•ืช ืฉื”ื•ืฆืื• ืžืฉื™ืžื•ืฉ ืขื‘ื•ืจ ืžืขื‘ื“ื™ Solaris OS ื•-SPARC (Solaris/SPARC, Solaris/x64 ื•-Linux/SPARC) ืžืชื•ืš ื›ื•ื•ื ื” ืœื”ืกื™ืจ ืืช ื”ื™ืฆื™ืื•ืช ื”ืœืœื• ื‘ืขืชื™ื“. ื‘ื™ื˜ื•ืœ ื™ืฆื™ืื•ืช ืืœื• ื™ืืคืฉืจ ืœืงื”ื™ืœื” ืœื”ืื™ืฅ ืืช ื”ืคื™ืชื•ื— ืฉืœ ืชื›ื•ื ื•ืช OpenJDK ื—ื“ืฉื•ืช ืžื‘ืœื™ ืœื‘ื–ื‘ื– ื–ืžืŸ ื‘ืชื—ื–ื•ืงื” ืฉืœ ืชื›ื•ื ื•ืช ืกืคืฆื™ืคื™ื•ืช ืœ-Solaris ื•-SPARC.
  • ื ืžื—ืง ืืกืคืŸ ื”ืืฉืคื” CMS (Concurrent Mark Sweep), ืฉืกื•ืžืŸ ืžื™ื•ืฉืŸ ืœืคื ื™ ืฉื ืชื™ื™ื ื•ื ืฉืืจ ืœื ืžืชื•ื—ื–ืง (CMS ื”ื•ื—ืœืฃ ืœืคื ื™ ื–ืžืŸ ืจื‘ ืขืœ ื™ื“ื™ ืื•ืกืฃ ื”ืืฉืคื” G1). ื—ื•ืฅ ืžื–ื”, ื”ื•ื“ื™ืข ื”ื•ืฆื™ื ืžืฉื™ืžื•ืฉ ืืช ื”ืฉื™ืžื•ืฉ ื‘ืฉื™ืœื•ื‘ ืฉืœ ืืœื’ื•ืจื™ืชืžื™ ืื™ืกื•ืฃ ืืฉืคื” ParallelScavenge ื•-SerialOld (ื”ืคืขืœ ืขื ื”ืืคืฉืจื•ื™ื•ืช "-XX:+UseParallelGC -XX:-UseParallelOldGC").
  • ืชืžื™ื›ื” ื ื™ืกื™ื•ื ื™ืช ืขื‘ื•ืจ ืืกืคืŸ ื”ืืฉืคื” ZGC (Z Garbage Collector) ื ื™ืชื ื” ื‘ืคืœื˜ืคื•ืจืžื•ืช macOS ื•-Windows (ืงื•ื“ื ืœื›ืŸ ื ืชืžื›ื” ืจืง ื‘ืœื™ื ื•ืงืก). ZGC ืคื•ืขืœ ื‘ืžืฆื‘ ืคืกื™ื‘ื™, ืžืžื–ืขืจ ื›ื›ืœ ื”ืืคืฉืจ ืืช ื”ืฉื”ื™ื™ื” ืขืงื‘ ืื™ืกื•ืฃ ืืฉืคื” (ื–ืžืŸ ื”ืกื˜ื™ื™ื” ื‘ืฉื™ืžื•ืฉ ื‘-ZGC ืื™ื ื• ืขื•ืœื” ืขืœ 10 ืืœืคื™ื•ืช ื”ืฉื ื™ื™ื”) ื•ื™ื›ื•ืœ ืœืขื‘ื•ื“ ืขื ืขืจื™ืžื•ืช ืงื˜ื ื•ืช ื•ืขืฆื•ืžื•ืช ื›ืื—ื“, ื‘ื’ื•ื“ืœ ืฉืœ ื›ืžื” ืžืื•ืช ืžื’ื”-ื‘ื™ื™ื˜ ื•ืขื“ ืœื˜ืจื”-ื‘ื™ื™ื˜ ืจื‘ื™ื.
  • ื”ื•ืกืจ ืขืจื›ืช ื›ืœื™ื ื•-API ืœื“ื—ื™ืกืช ืงื‘ืฆื™ JAR ื‘ืืžืฆืขื•ืช ืืœื’ื•ืจื™ืชื Pack200.

ืžืงื•ืจ: OpenNet.ru

ื”ื•ืกืคืช ืชื’ื•ื‘ื”