ИзданиС на Java SE 16

Π‘Π»Π΅Π΄ ΡˆΠ΅ΡΡ‚ мСсСца Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° компания Oracle пусна ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Java SE 16 (Java Platform, Standard Edition 16), ΠΊΠ°Ρ‚ΠΎ Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ‚Π½Π°Ρ‚Π° рСализация Π½Π° която Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ OpenJDK. Π’ Java SE 16 Π΅ Π·Π°ΠΏΠ°Π·Π΅Π½Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡ‚Π΅ издания Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Java, всички ΠΏΠΎ-Ρ€Π°Π½ΠΎ написани Java ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ Ρ‰Π΅ работят Π±Π΅Π· измСнСния ΠΏΡ€ΠΈ стартиранС с Π½ΠΎΠ²Π°Ρ‚Π° вСрсия. Π˜Π½ΡΡ‚Π°Π»Π°Ρ†ΠΈΠΎΠ½Π½ΠΈΡ‚Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π½Π° Java SE 16 (JDK, JRE ΠΈ Server JRE) са ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ΠΈ Π·Π° Linux (x86_64, AArch64), Windows ΠΈ macOS. РСализацията Π½Π° Java 16, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π° Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° OpenJDK, Π΅ напълно ΠΎΡ‚Π²ΠΎΡ€Π΅Π½Π° ΠΏΠΎΠ΄ лицСнзия GPLv2 с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π·Π° GNU ClassPath, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Ρ‰ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΡΠ²ΡŠΡ€Π·Π²Π°Π½Π΅ с Ρ‚ΡŠΡ€Π³ΠΎΠ²ΡΠΊΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ.

Java SE 16 Π΅ класифицирана ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ с ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ срок Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°, обновлСния Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ Π΄ΠΎ слСдващото ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. ΠšΠ°Ρ‚ΠΎ вСрсия с Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° (LTS) слСдва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Java SE 11, обновлСния Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ сС ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Ρ‚ Π΄ΠΎ 2026 Π³ΠΎΠ΄ΠΈΠ½Π°. БлСдващият LTS Ρ€Π΅Π»ΠΈΠ· Π΅ насрочСн Π·Π° сСптСмври 2021 Π³ΠΎΠ΄ΠΈΠ½Π°. НапомнямС, Ρ‡Π΅ ΠΎΡ‚ вСрсии Java 10 ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΏΡ€Π΅ΠΌΠΈΠ½Π° Π½Π° Π½ΠΎΠ² процСс Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π²ΠΈΠΆΠ΄Π° ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΡŠΠΊ Ρ†ΠΈΠΊΡŠΠ» Π·Π° създаванС Π½Π° Π½ΠΎΠ²ΠΈ вСрсии. Новата функционалност Π²Π΅Ρ‡Π΅ сС Ρ€Π°Π·Π²ΠΈΠ²Π° Π² Π΅Π΄Π½Π° постоянно Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π³Π»Π°Π²Π½Π° ΠΊΠ»ΠΎΠ½, Π² която сС Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ ΠΈ ΠΎΡ‚ която Π½Π° всСки ΡˆΠ΅ΡΡ‚ мСсСца сС отварят Π½ΠΎΠ²ΠΈ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π·Π° стабилизиранС Π½Π° Π½ΠΎΠ²ΠΈΡ‚Π΅ издания.

ΠŸΡ€ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ°Ρ‚Π° Π½Π° Π½ΠΎΠ²ΠΎΡ‚ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° бСшС прСмСстСна ΠΎΡ‚ систСмата Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° вСрсиитС Mercurial Π½Π° Git ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° GitHub. ΠžΡ‡Π°ΠΊΠ²Π° сС миграцията Π΄Π° повиши производитСлността Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅Ρ‚ΠΎ, Π΄Π° ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈ СфСктивността Π½Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ, Π΄Π° осигури Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΡ‚Π΅ Π² цялата история Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€ΠΈ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π½Π° ΠΏΡ€Π΅Π³Π»Π΅Π΄Π° Π½Π° ΠΊΠΎΠ΄Π° ΠΈ Π΄Π° Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π° API Π·Π° автоматизация Π½Π° Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΡ‚Π΅ процСси. ОсвСн Ρ‚ΠΎΠ²Π°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Git ΠΈ GitHub ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΏΠΎ-ΠΏΡ€ΠΈΠ²Π»Π΅ΠΊΠ°Ρ‚Π΅Π»Π΅Π½ Π·Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ΠΈ ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΡ†ΠΈ, свикнали с Git.

ΠžΡ‚ новоститС Π² Java 16 ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ:

  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ СкспСримСнталСн ΠΌΠΎΠ΄ΡƒΠ» jdk.incubator.vector с рСализация Π½Π° API Vector, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΈ изчислСния, ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°Π½ΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΈ инструкции Π½Π° процСсори x86_64 ΠΈ AArch64 ΠΈ позволяващи Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π° мноТСство стойности (SIMD). Π—Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΎΡ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈΡ‚Π΅ Π·Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½Π° вСкторизация Π½Π° скалярни ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, прСдоставСни ΠΎΡ‚ JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° HotSpot, новият API позволява явно ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° вСкторизацията Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° Π΄Π°Π½Π½ΠΈ.
  • Π’ ΠΊΠΎΠ΄Π° Π½Π° JDK ΠΈ VM HotSpot, написан Π½Π° C++, Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈ Π² спСцификацията C++14. По-Ρ€Π°Π½ΠΎ бСшС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° стандартитС C++98/03.
  • Π’ сборщика Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ ZGC (Z Garbage Collector), ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π² пасивСн Ρ€Π΅ΠΆΠΈΠΌ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€Π° забавянията ΠΎΡ‚ ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ, Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π° стСковС Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈ Π±Π΅Π· спиранС Π½Π° ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΏΠΎΡ‚ΠΎΡ†ΠΈΡ‚Π΅ Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ. Π’ ZGC остават само Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ изискват спиранС ΠΈ ΠΈΠΌΠ°Ρ‚ постоянни забавяния, ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π½Π΅ Π½Π°Π΄Π²ΠΈΡˆΠ°Π²Π°Ρ‰ΠΈ няколко стотин ΠΌΠΈΠΊΡ€ΠΎ сСкунди.
  • Π’ класовСтС SocketChannel, ServerSocketChannel ΠΈ java.nio.channels Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½Π° ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Unix-сокСти (AF_UNIX).
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π΅ ΠΏΠΎΡ€Ρ‚ Π·Π° Linux дистрибуцията Alpine с стандартната C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° musl, която Π΅ популярна Π² срСди Π·Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈ, микросСрвизи, ΠΎΠ±Π»Π°Ρ‡Π½ΠΈ ΠΈ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΈ систСми. ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π°Ρ‚Π° вСрсия Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ срСди позволява стартиранС Π½Π° Java ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ прилоТСния. ОсвСн Ρ‚ΠΎΠ²Π°, с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° jlink, ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ‚ всички Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Π΄Π° сС създадС ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π·Π° изпълнСниС Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π΅Π½ ΠΎΠ±Ρ€Π°Π·, спСцифичСн Π·Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Elastic Metaspace, ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Ρ‰ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΏΠΎ алокация ΠΈ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚, Π·Π°Π΅Ρ‚Π° ΠΎΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π½Π° класовС (metaspace) Π² JVM HotSpot. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Elastic Metaspace намалява фрагмСнтацията Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, намалява Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈΡ‚Π΅ Π² Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊΠ° Π½Π° класовС ΠΈ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»Π½ΠΎ влияС Π½Π° производитСлността Π½Π° Π΄ΡŠΠ»Π³ΠΎΡΡ€ΠΎΡ‡Π½ΠΈ ΡΡŠΡ€Π²ΡŠΡ€Π½ΠΈ прилоТСния Ρ‡Ρ€Π΅Π· ΠΏΠΎ-Π±ΡŠΡ€Π·ΠΎ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма, Π·Π°Π΅Ρ‚Π° ΠΎΡ‚ Π½Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½ΠΈ Π½Π° класовС. Π—Π° ΠΈΠ·Π±ΠΎΡ€Π° Π½Π° Ρ€Π΅ΠΆΠΈΠΌ Π½Π° освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° слСд изчистванС Π½Π° класовС Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° опция "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΏΠΎΡ€Ρ‚ JDK Π·Π° Windows систСми, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π½Π° ΠΎΠ±ΠΎΡ€ΡƒΠ΄Π²Π°Π½Π΅ с процСсори Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° AArch64.
  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π΅ Ρ‚Ρ€Π΅Ρ‚Π° ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π½Π° вСрсия Π½Π° API Foreign-Memory Access, позволяваща Π½Π° Java прилоТСнията бСзопасно ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎ Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°Ρ‚ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ области Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° извън ΠΊΡƒΠΏΠ° Java, Ρ‡Ρ€Π΅Π· ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Π½Π΅ с Π½ΠΎΠ²ΠΈΡ‚Π΅ абстракции MemorySegment, MemoryAddress ΠΈ MemoryLayout.
  • Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Π½ Π΅ СкспСримСнталСн API Foreign Linker, ΠΊΠΎΠΉΡ‚ΠΎ прСдоставя Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΎΡ‚ Java Π΄ΠΎ Π½Π°Ρ‚ΠΈΠ²Π΅Π½ ΠΊΠΎΠ΄. Π—Π°Π΅Π΄Π½ΠΎ с API Foreign-Memory, новият интСрфСйс Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΎ опростява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ ΠΎΠΊΠΎΠ»ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ сподСлСни Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • Π”ΠΎΠ±Π°Π²Π΅Π½ Π΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ jpackage, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΡΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π·Π° самостоятСлни Java прилоТСния. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΡŠΡ‚ сС основава Π½Π° javapackager ΠΎΡ‚ JavaFX ΠΈ позволява Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈ, спСцифични Π·Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠΈ (msi ΠΈ exe Π·Π° Windows, pkg ΠΈ dmg Π·Π° macOS, deb ΠΈ rpm Π·Π° Linux). ΠŸΠ°ΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ всички Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ зависимости.
  • Π‘Ρ‚Ρ€ΠΎΠ³Π° инкапсулация Π½Π° всички Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° JDK Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½ΠΈ API, ΠΊΠ°Ρ‚ΠΎ sun.misc.Unsafe. Бтойността Π½Π° опцията Β«β€”illegal-accessΒ» сСга Π΅ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ настроСна Π½Π° Β«denyΒ» вмСсто Β«permitΒ», ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‰Π΅ Π±Π»ΠΎΠΊΠΈΡ€Π° ΠΎΠΏΠΈΡ‚ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ ΠΎΡ‚ ΠΊΠΎΠ΄Π° Π΄ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ класовС, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈ ΠΏΠΎΠ»Π΅Ρ‚Π°. Π—Π° заобикалянС Π½Π° ограничСнията трябва Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° опцията Β«β€”illegal-access=permitΒ».
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π΅ рСализацията Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€a Β«instanceofΒ» Π·Π° сопоставянС с ΠΎΠ±Ρ€Π°Π·Π΅Ρ†, ΠΊΠΎΠΉΡ‚ΠΎ позволява Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ опрСдСлянС Π½Π° Π»ΠΎΠΊΠ°Π»Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π·Π° Ρ€Π°Π±ΠΎΡ‚Π° с ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎΡ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, сСга ΠΌΠΎΠΆΠ΅ Π΄Π° сС пишС Β«if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}Β» Π±Π΅Π· Π΄Π° Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явното ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Β«String s = (String) objΒ». ΠŸΡ€Π΅Π΄ΠΈ: if (obj instanceof Group) { Group group = (Group) obj; var entries = group.getEntries(); } Π‘Π΅Π³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΈ Π±Π΅Π· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Β«Group group = (Group) objΒ»: if (obj instanceof Group group) { var entries = group.getEntries(); }
  • Π‘Ρ‚Π°Π±ΠΈΠ»ΠΈΠ·ΠΈΡ€Π°Π½Π° Π΅ рСализацията Π½Π° ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° Β«recordΒ», прСдоставяща ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Π° Ρ„ΠΎΡ€ΠΌΠ° Π·Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° класовС, позволяваща Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ явното ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ нискоуровнСви ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠ°Ρ‚ΠΎ equals(), hashCode() ΠΈ toString(), Π² случаи, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΄Π°Π½Π½ΠΈΡ‚Π΅ сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚ само Π² ΠΏΠΎΠ»Π΅Ρ‚Π°, Ρ‡ΠΈΠΉΡ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π΅ сС промСня. ΠšΠΎΠ³Π°Ρ‚ΠΎ Π² класa сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Ρ‚ΠΈΠΏΠΎΠ²ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΡ‚Π΅ equals(), hashCode() ΠΈ toString(), Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ Π±Π΅Π· тяхното явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅: public record BankTransaction(LocalDate date, double amount, String description) {}

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

  • ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ Π²Ρ‚ΠΎΡ€ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π½Π° Π·Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΈΡ‚Π΅ (Β«sealedΒ») класовС ΠΈ интСрфСйси, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈ класовС ΠΈ интСрфСйси Π·Π° наслСдяванС, Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ прСизписванС Π½Π° рСализацията. Π—Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΈΡ‚Π΅ класовС прСдоставят ΠΈ ΠΏΠΎ-Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ‚ΠΈΠ²Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π°Π½Π΅ Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° супСрклас, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ Π½Π° Π΄ΠΎΡΡ‚ΡŠΠΏ, основан Π½Π° явното изброяванС Π½Π° подкласа, Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π·Π° Ρ€Π°Π·ΡˆΠΈΡ€Π΅Π½ΠΈΠ΅. package com.example.geometry; public sealed class Shape permits com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}

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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster