Π‘Π»Π΅Π΄ ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Oracle ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° (Java Platform, Standard Edition 14), Ρ Π΅ΡΠ°Π»ΠΎΠ½Π½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ° ΠΏΡΠΎΠ΅ΠΊΡa OpenJDK. Π Java SE 14 Π΅ Π·Π°ΠΏΠ°Π·Π΅Π½Π° ΠΎΠ±ΡΠ°ΡΠ½Π°ΡΠ° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Java, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Java ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Ρ Π½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ. ΠΠΎΡΠΎΠ²ΠΈΡΠ΅ Π·Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ ΠΏΠ°ΠΊΠ΅ΡΠΈ Π½Π° Java SE 14 (JDK, JRE ΠΈ Server JRE) Π·Π° Linux (x86_64), Windows ΠΈ macOS. ΠΡΠ°Π»ΠΎΠ½Π½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ΅Π½Π° Π² ΡΠ°ΠΌΠΊΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° OpenJDK Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΎΡΠ²ΠΎΡΠ΅Π½Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡ GPLv2 Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° GNU ClassPath, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ ΡΡΡΠ³ΠΎΠ²ΡΠΊΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ.
Java SE 14 Π΅ ΠΊΠ»Π°ΡΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΊΠ°ΡΠΎ Π²Π΅ΡΡΠΈΡ Ρ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΡΡΠΎΠΊ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°, Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π° Π½Π΅Π³ΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΡΠΊΠ°Ρ Π΄ΠΎ ΡΠ»Π΅Π΄Π²Π°ΡΠΎΡΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅. ΠΠ° Π²Π΅ΡΡΠΈΡ Ρ Π΄ΡΠ»Π³ΠΎΡΡΠΎΡΠ΅Π½ ΡΡΠΎΠΊ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° (LTS) ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Java SE 11, Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π·Π° ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ΅ ΠΏΡΡΠΊΠ°Ρ Π΄ΠΎ 2026 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠΡΠ΅Π΄ΠΈΡΠ½Π°ΡΠ° LTS Π²Π΅ΡΡΠΈΡ Java 8 ΡΠ΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° Π΄ΠΎ Π΄Π΅ΠΊΠ΅ΠΌΠ²ΡΠΈ 2020 Π³ΠΎΠ΄ΠΈΠ½Π°. Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° LTS Π²Π΅ΡΡΠΈΡ Π΅ ΠΏΠ»Π°Π½ΠΈΡΠ°Π½Π° Π·Π° ΡΠ΅ΠΏΡΠ΅ΠΌΠ²ΡΠΈ 2021 Π³ΠΎΠ΄ΠΈΠ½Π°. ΠΠ°ΠΏΠΎΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅, ΡΠ΅ ΠΎΡ Π²Π΅ΡΡΠΈΡ Java 10 ΠΏΡΠΎΠ΅ΠΊΡΡΡ ΠΏΡΠ΅ΠΌΠΈΠ½Π° Π½Π° Π½ΠΎΠ² ΠΏΡΠΎΡΠ΅Ρ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ ΠΏΠΎ-ΠΊΡΠ°ΡΡΠΊ ΡΠΈΠΊΡΠ» Π½Π° ΠΈΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ. ΠΠΎΠ²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° Π² ΠΏΠΎΡΡΠΎΡΠ½Π½Π° master ΠΊΠ»ΠΎΠ½, ΠΊΡΠ΄Π΅ΡΠΎ ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π³ΠΎΡΠΎΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ, Π° Π²Π΅Π΄Π½ΡΠΆ Π½Π° ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ²Π°Ρ ΠΊΠ»ΠΎΠ½ΠΎΠ²Π΅ Π·Π° ΡΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈΡΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΡ.
ΠΡ :
- ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Β«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();
} - ΠΠΎΠ±Π°Π²Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π½ΠΎΠ²ΠΎΡΠΎ ΠΊΠ»ΡΡΠΎΠ²ΠΎ ΡΠ»ΠΎΠ²ΠΎ ««, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠ½Π° ΡΠΎΡΠΌΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΊΠ»Π°ΡΠΎΠ²Π΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ ΡΠ²Π½ΠΎΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΡΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΊΠ°ΡΠΎ equals(), hashCode() ΠΈ toString(), Π² ΡΠ»ΡΡΠ°ΠΈΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π°Ρ ΡΠ°ΠΌΠΎ Π² ΠΏΠΎΠ»Π΅ΡΠ°, ΡΠΈΡΡΠΎ ΡΠ°Π±ΠΎΡΠ° Π½Π΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ. ΠΠΎΠ³Π°ΡΠΎ Π² ΠΊΠ»Π°ΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠΈΠΏΠΈΡΠ½ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ equals(), hashCode() ΠΈ toString(), ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΌΠΈΠ½Π΅ Π±Π΅Π· ΡΡΡ
Π½ΠΎΡΠΎ ΡΠ²Π½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:
public record BankTransaction(LocalDate date,
double amount,
String description) {}Π’Π°Π·ΠΈ ΠΎΠ±ΡΠ²Π° ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ equals(), hashCode() ΠΈ toString() Π² Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ Π² Π΄Π°Π½Π½ΠΈΡΠ΅ (getter).
- ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π½ΠΎΠ²ΠΈΡ ΡΠΎΡΠΌΠ°Ρ Π½Π° ΠΈΠ·ΡΠ°Π·ΠΈ Β«switchΒ», ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Β«breakΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²ΡΠ°ΡΡΡΠΈ ΡΠ΅ Π΅ΡΠΈΠΊΠ΅ΡΠΈ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π΅ ΡΠ°ΠΌΠΎ Π² ΡΠΎΡΠΌΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ, Π½ΠΎ ΠΈ ΠΊΠ°ΡΠΎ ΠΈΠ·ΡΠ°Π·.
var log = switch (event) {
case PLAY -> Β«ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ Π΅ Π·Π°Π΄Π΅ΠΉΡΡΠ²Π°Π» Π±ΡΡΠΎΠ½Π° Π·Π° Π²ΡΠ·ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅Β»;
case STOP, PAUSE -> Β«ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ ΠΎΡ ΠΏΠΎΡΠΈΠ²ΠΊΠ°Β»;
default -> {
String message = event.toString();
LocalDateTime now = LocalDateTime.now();
yield Β«ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ ΡΡΠ±ΠΈΡΠΈΠ΅ Β» + message +
Β» Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° Β» + now;
}
}; - Π Π°Π·ΡΠΈΡΠ΅Π½Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° β Π½ΠΎΠ² ΡΠΎΡΠΌΠ°Ρ Π½Π° ΡΡΡΠΈΠ½Π³ΠΎΠ²ΠΈ Π»ΠΈΡΠ΅ΡΠ°Π»ΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅ΡΠΎ Π² ΠΈΠ·Ρ
ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΡΡΠ°Π½Π½ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈ Π΄Π°Π½Π½ΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ Π΅ΠΊΡΠ°Π½ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΎΡΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΡΠ° Π² Π±Π»ΠΎΠΊΠ°. ΠΠ±ΡΠ°ΠΌΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π±Π»ΠΎΠΊΠ° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Ρ ΡΡΠΈ Π΄Π²ΠΎΠΉΠ½ΠΈ ΠΊΠ°Π²ΠΈΡΠΊΠΈ. Π Java 14 Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΈΡΠ΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡ Β«\sΒ» Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π½Π° Π΅Π΄Π½ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈ Β«\Β» Π·Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ Ρ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΡΠ΅Π΄ (ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈΡ ΡΠ΅Π΄, ΠΊΠΎΠ³Π°ΡΠΎ Π΅ Π½ΡΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π΅Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΡΠ»ΡΠ³ ΡΠ΅Π΄). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠΎΠ΄
String html = Β«<HTML>Β» +
Β«\n\tΒ» + Β«<BODY>Β» +
Β«\n\t\tΒ» + Β«<H1>\Β»Java 14 Π΅ ΡΡΠΊ!\Β»<\/H1>Β» +
Β«\n\tΒ» + Β«<\/BODY>Β» +
Β«\nΒ» + Β«<\/HTML>Β»;ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΡΠΈ:
String html = «»»
<HTML>
<BODY>
<H1>Β»Java 14\
Π΅ ΡΡΠΊ!Β»<\/H1>
<\/BODY>
<\/HTML>»»»; - Π Π°Π·ΡΠΈΡΠ΅Π½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΎΡΡ ΠΏΡΠΈ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΠΏΡΠΈ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ . ΠΠΊΠΎ ΠΏΡΠ΅Π΄ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π·Π° Π³ΡΠ΅ΡΠΊΠ° ΡΠ°ΠΌΠΎ ΡΠ΅ ΠΏΠΎΠ·ΠΎΠ²Π°Π²Π°ΡΠ΅ Π½Π° Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΡΠ΅Π΄Π°, ΡΠ΅Π³Π° Π² Π½Π΅Π³ΠΎ ΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈΠ·ΠΈΡΠ° ΠΊΠΎΠΉ ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΡΠ΅ Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ°Π» ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ. Π Π°Π·ΡΠΈΡΠ΅Π½Π°ΡΠ° Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° Π² ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π° ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Ρ ΡΠ»Π°Π³Π° Β«-XX:+ShowCodeDetailsInExceptionMessagesΒ». ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΠΎΠ·ΠΈ ΡΠ»Π°Π³, ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π² ΡΠ΅Π΄Π°
var name = user.getLocation().getCity().getName();
ΡΠ΅ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΡΠΎ
Exception in thread Β«mainΒ» java.lang.NullPointerException: Cannot invoke Β«Location.getCity()Β»
because the return value of Β«User.getLocation()Β» is null
at NullPointerExample.main(NullPointerExample.java:5):5)ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π΄Π° ΡΠ΅ ΡΠ°Π·Π±Π΅ΡΠ΅, ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΡΡ Location.getCity() Π½Π΅ Π΅ Π±ΠΈΠ» ΠΈΠ·Π²ΠΈΠΊΠ°Π½, Π° User.getLocation() Π΅ Π²ΡΡΠ½Π°Π» ΡΡΠΎΠΉΠ½ΠΎΡΡ null.
- ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° jpackage, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π·Π° ΡΠ°ΠΌΠΎΠ΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΈ (self-contained) Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π£ΡΠΈΠ»ΠΈΡΠ°ΡΠ° ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° javapackager ΠΎΡ JavaFX ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠΈ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ (msi ΠΈ exe Π·Π° Windows, pkg ΠΈ dmg Π·Π° macOS, deb ΠΈ rpm Π·Π° Linux). ΠΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ Π²ΡΠΈΡΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ.
- Π ΡΠ±ΠΎΡΡΠΈΠΊΠ° Π½Π° ΠΌΡΡΠΎΡ G1 Π½ΠΎΠ² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΠΊΠΎΠΉΡΠΎ Π²Π·Π΅ΠΌΠ° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π² Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° . ΠΠΎΠ²ΠΈΡΡ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅Π» Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΡΠ΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ° ΡΡΠ΅Π· ΡΠ»Π°Π³Π° Β«+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 ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈ 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 ΠΌΡ.) ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Ρ ΠΌΠ°Π»ΠΊΠΈ ΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΊΡΠΏΡΠΈΠ½ΠΈ, ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠΎΡΠΈΠ½ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠ° Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ°Π±Π°ΠΉΡΠΈ.
- ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ ΠΈ API Π·Π° ΠΊΠΎΠΌΠΏΡΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° JAR ΡΠ°ΠΉΠ»ΠΎΠ²Π΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° Pack200.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
