ВСрсия Π½Π° Java SE 14

Π‘Π»Π΅Π΄ ΡˆΠ΅ΡΡ‚ мСсСца Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, Oracle освободСн ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ° JavaSE 14 (Java Platform, Standard Edition 14), ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ OpenJDK с ΠΎΡ‚Π²ΠΎΡ€Π΅Π½ ΠΊΠΎΠ΄ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π° рСализация. Java SE 14 ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΎΠ±Ρ€Π°Ρ‚Π½Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈ издания Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Java; всички написани ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Ρ‰Π΅ работят Π±Π΅Π· ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π±ΡŠΠ΄Π°Ρ‚ стартирани ΠΏΠΎΠ΄ Π½ΠΎΠ²Π°Ρ‚Π° вСрсия. Π“ΠΎΡ‚ΠΎΠ²ΠΈ Π·Π° инсталиранС ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ†ΠΈΠΈ Π½Π° Java SE 14 (JDK, JRE ΠΈ ΡΡŠΡ€Π²ΡŠΡ€ 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 (obj instanceof Group) {
    Π“Ρ€ΡƒΠΏΠ° Π³Ρ€ΡƒΠΏΠ° = (Π“Ρ€ΡƒΠΏΠ°) obj;
    var entries = group.getEntries();
    }

    Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π±Π΅Π· дСфиницията β€žΠ“Ρ€ΡƒΠΏΠΎΠ²Π° Π³Ρ€ΡƒΠΏΠ° = (Π“Ρ€ΡƒΠΏΠ°) objβ€œ:

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π½ΠΎΠ²Π°Ρ‚Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π° Π΄ΡƒΠΌΠ° "Ρ€Π΅ΠΊΠΎΡ€Π΄", ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° Ρ„ΠΎΡ€ΠΌΠ° Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° класовС, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π±Π΅Π³Π½Π΅Ρ‚Π΅ ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎΡ‚ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π½Π° ниско Π½ΠΈΠ²ΠΎ, ΠΊΠ°Ρ‚ΠΎ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ equals(), hashCode() ΠΈ toString() Π² случаитС, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ само Π² ΠΏΠΎΠ»Π΅Ρ‚Π°, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ сС промСня. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π΄Π°Π΄Π΅Π½ клас ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° стандартни Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ equals(), hashCode() ΠΈ toString(), Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΌΠΈΠ½Π΅ Π±Π΅Π· тяхната ΠΈΠ·Ρ€ΠΈΡ‡Π½Π° дСфиниция:

    ΠΏΡƒΠ±Π»ΠΈΡ‡Π΅Π½ запис Π½Π° Π±Π°Π½ΠΊΠΎΠ²Π° транзакция (Π΄Π°Ρ‚Π° Π½Π° мСстна Π΄Π°Ρ‚Π°,
    Π΄Π²ΠΎΠΉΠ½ΠΎ количСство
    ОписаниС на низ) {}

    Π’Π°Π·ΠΈ дСкларация Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ‰Π΅ Π΄ΠΎΠ±Π°Π²ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ equals(), hashCode() ΠΈ toString() Π² допълнСниС към ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ конструктор ΠΈ getter.

  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½ ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° Π½ΠΎΠ²Π° Ρ„ΠΎΡ€ΠΌΠ° Π½Π° ΠΈΠ·Ρ€Π°Π·ΠΈ β€žΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡Π²Π°Π½Π΅β€œ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π½Π΅ изисква посочванС Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° β€žΠΏΡ€Π΅ΠΊΡŠΡΠ²Π°Π½Π΅β€œ, позволява Π²ΠΈ Π΄Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Ρ‚Π΅ повтарящи сС Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π½Π΅ само ΠΏΠΎΠ΄ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π½ΠΎ ΠΈ ΠΊΠ°Ρ‚ΠΎ изразяванС.

    var log = switch (ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅) {
    case PLAY -> β€žΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ Π΅ задСйствал Π±ΡƒΡ‚ΠΎΠ½Π° Π·Π° Π²ΡŠΠ·ΠΏΡ€ΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅β€œ;
    case STOP, PAUSE -> β€œΠŸΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡΡ‚ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ почивка”;
    ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ -> {
    Низово ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ = event.toString();
    LocalDateTime сСга = LocalDateTime.now();
    yield "НСизвСстно ΡΡŠΠ±ΠΈΡ‚ΠΈΠ΅" + ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ +
    » влСзли » + сСга;
    }
    };

  • Π Π°Π·ΡˆΠΈΡ€Π΅Π½Π° СкспСримСнтална ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° тСкстови Π±Π»ΠΎΠΊΠΎΠ²Π΅ - Π½ΠΎΠ²Π° Ρ„ΠΎΡ€ΠΌΠ° Π½Π° Π½ΠΈΠ·ΠΎΠ²ΠΈ Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΈ, която Π²ΠΈ позволява Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎΡ€Π΅Π΄ΠΎΠ²ΠΈ тСкстови Π΄Π°Π½Π½ΠΈ Π² изходния ΠΊΠΎΠ΄, Π±Π΅Π· Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π΅ΠΊΡ€Π°Π½ΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π½Π°Ρ†ΠΈ ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡ‚ΠΎ тСкстово Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½Π΅ Π² Π±Π»ΠΎΠΊΠ°. Π‘Π»ΠΎΠΊΡŠΡ‚ Π΅ Ρ€Π°ΠΌΠΊΠΈΡ€Π°Π½ с Ρ‚Ρ€ΠΈ Π΄Π²ΠΎΠΉΠ½ΠΈ ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ. Π’ 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()" Π΅ Π½ΡƒΠ»Π°
    Π² NullPointerExample.main(NullPointerExample.java:5):5)

    ΠΊΠΎΠ΅Ρ‚ΠΎ ясно ΠΏΠΎΠΊΠ°Π·Π²Π°, Ρ‡Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΡŠΡ‚ Location.getCity() Π½Π΅ Π΅ Π±ΠΈΠ» ΠΈΠ·Π²ΠΈΠΊΠ°Π½ ΠΈ User.getLocation() Π΅ Π²ΡŠΡ€Π½Π°Π» Π½ΡƒΠ»Π°.

  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΎ ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° ΠΏΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° jpackage, която Π²ΠΈ позволява Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° самостоятСлни Java прилоТСния. ΠŸΠΎΠΌΠΎΡ‰Π½Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π΅ Π±Π°Π·ΠΈΡ€Π°Π½Π° Π½Π° javapackager ΠΎΡ‚ JavaFX ΠΈ Π²ΠΈ позволява Π΄Π° ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ във Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ, СстСствСни Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ (msi ΠΈ exe Π·Π° Windows, pkg ΠΈ dmg Π·Π° macOS, deb ΠΈ rpm Π·Π° Linux). ΠŸΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ зависимости.
  • Към ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ G1 Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΎ Π½ΠΎΠ² ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΡ‚Ρ‡ΠΈΡ‚Π° спСцификата Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈ систСми, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‰ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° IN. Новият Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π» Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ„Π»Π°Π³Π° β€ž+XX:+UseNUMAβ€œ ΠΈ ΠΌΠΎΠΆΠ΅ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ производитСлността Π½Π° NUMA систСми.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ API Π·Π° наблюдСниС Π² Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π½Π° JFR (JDK Flight Recorder) ΡΡŠΠ±ΠΈΡ‚ΠΈΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° Π½Π΅ΠΏΡ€Π΅ΠΊΡŠΡΠ½Π°Ρ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ΠΎ jdk.nio.mapmode ΠΌΠΎΠ΄ΡƒΠ», ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Π½ΠΎΠ²ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠΈ (READ_ONLY_SYNC, WRITE_ONLY_SYNC) Π·Π° създаванС Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡ€Π°Π½ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΈ Π±ΡƒΡ„Π΅Ρ€ΠΈ (MappedByteBuffer), ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‰Π°Ρ‰ΠΈ към СнСргонСзависима ΠΏΠ°ΠΌΠ΅Ρ‚ (NVM).
  • Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΎ ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ ΠΏΡ€Π΅Π³Π»Π΅Π΄ Π½Π° API Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ‡ΡƒΠΆΠ΄Π° ΠΏΠ°ΠΌΠ΅Ρ‚, позволяващ Π½Π° Java прилоТСнията Π΄Π° ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΡΠ²Π°Ρ‚ сигурСн ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π΅Π½ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ€Π΅Π³ΠΈΠΎΠ½ΠΈ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° извън Java heap Ρ‡Ρ€Π΅Π· ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ абстракции 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 (ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π° сС ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΡˆΠ΅ само Π½Π° Linux). ZGC Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² пасивСн Ρ€Π΅ΠΆΠΈΠΌ, ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π° латСнтността, Π΄ΡŠΠ»ΠΆΠ°Ρ‰Π° сС Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊΠ°, Π΄ΠΎΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Π΅ възмоТно (Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Π½Π° спиранС ΠΏΡ€ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ZGC Π½Π΅ надвишава 10 ms.) ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ с ΠΌΠ°Π»ΠΊΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ с ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΈ ΠΊΡƒΠΏΡ‡ΠΈΠ½ΠΈ, Π²Π°Ρ€ΠΈΡ€Π°Ρ‰ΠΈ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΡ‚ няколкостотин ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚Π° Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚Π°.
  • ΠŸΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ΠΎ Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΡƒΠΌ ΠΈ API Π·Π° компрСсиранС Π½Π° JAR Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌΠ° Pack200.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€