JavaRush /Java Blog /Random-TK /Java 13: Täze aýratynlyklar

Java 13: Täze aýratynlyklar

Toparda çap edildi
JDK-nyň her alty aýdan bir gezek çykmagyna eýýäm öwrenişdik. Şu wagta çenli bu çemeleşme özüni aklady we käbir işläp düzüjileriň täzelenmeleri yzarlamazlyk aladalary biderek boldy: alty aýlyk üýtgeşmeler az we olar öňküsi ýaly global däl. Garaz, täze programmistler täzeligi asla duýman bilerler. Java 13: täze aýratynlyklar - 1Şeýle-de bolsa, geljekki programma üpjünçiligini täzeliklerden habardar etmek has gowudyr. Bu makalada adatça kabul edilen giňeltmek tekliplerini (JEP) beýan ederis. Java 13-de diňe bäş sany JEP we 76 sany täze kitaphananyň elementleri bar (olaryň ýarysy java.io paketine ýönekeý goşmaçalar).

JEP 355 : Tekst bloklary (Öňünden syn)

Diliň sintaksisini üýtgetmekden başlalyň. Olaryň iň möhümi tekst bloklarydyr. Nyşanlardan gaça durmaga we setirleri nähili formatlamalydygyny bilmäge mümkinçilik berýär. JDK 12-iň simli sözler bilen işlemek üçin garaşylýan “Çig setir edebiýaty” (JEP 326) aýratynlygyny öz içine almaýandygyny ýadyňyzdan çykarmaň . Java 13-de JEP 355 tekst bloklary bilen çalşyryldy. Java-da bir setir goşa dyrnak bilen örtülendir. Bu gowy, ýöne mesele bir çyzygyň deslapky faýlyň birden köp setirini tutup bilmezligi (Java setiri bilen bulaşmazlyk üçin bu ýerde faýl setirini “setir” diýeris). Geliň, aýlanyp göreliň, mysal üçin \narakesme zerur bolsa nyşany ýa-da köp sözli sözleriň birleşmegini ulanalyň. Gaty gowy çykmaýar! Içine goýlan HTML, XML, SQL ýa-da JSON bölekleri bolan tekst sözlemleri esasanam kyn. Bularyň hemmesi gaçmak, birleşmek we el bilen redaktirlemek kody ýazmagy oňaýsyz edýär we okamak kynlaşdyrýar. Tekst bloklary bu meseläni çözmäge synanyşýarlar. Ah ... üç gezek goşa sitata bilen başlaýarlar we olar bilen gutarýarlar (bilýärin, gaty gowy däl). Sitirleriň arasyndaky hemme zat, täze setirleri goşmak bilen setiriň bir bölegi hökmünde düşündirilýär. Tekst bloklary adaty tekst sözleýişleri bilen birmeňzeş ulanylyp bilner, Java bolsa kody şol bir görnüşde düzer. Açylýan sitatalar setir çyzgysy bilen bolmaly; tekst bloklaryny bir setirde ulanyp bolmaýar, şonuň üçin kod
String smallBlock = """Only one line""";
aşakdaky ýalňyşlyklara sebäp bolar:
TextBlock.java:3: error: illegal text block open delimiter sequence, missing line terminator
   String smallBlock = """Text Block""";
                          ^
TextBlock.java:3: error: illegal text block open delimiter sequence, missing line terminator
   String smallBlock = """Text Block""";
                                   	^
Simpleönekeý HTML bölegi indi şeýle ýazylyp bilner:
String htmlBlock = """
               	<html>
                 	<body>
                   	<p>CodeGym Web page</p>
                 	</body>
               	<html>
         	     """;
Tekst bloklaryny ulananyňyzda habardar bolmak has gowy bolan birnäçe inçelikleri belläliň. Ingapylýan sitatalaryň ýerleşdirilmegi möhüm bolup çykýar: wagtal-wagtal ak giňişligiň nähili işleýändigini kesgitleýär. Aboveokardaky mysalda, ýapylýan sitatalar HTML tekstiniň ýazgysy bilen gabat gelýär. Bu ýagdaýda düzüji indentasiýa boşluklaryny aýyrar we netijede biz şeýle setir alarys:
<html>
  <body>
    <p>My web page</p>
  </body>
</html>
Bellik:şeýle setir setiriň ahyrynda täze setir bolar. Gerek däl bolsa, "" "ýapylýan sitatalar göni </html> belliginden soň ýerleşdirilip bilner. Ingapylýan sitatalary çep tarapa has ýakynlaşdyrsak, bu aýrylan indentasiýa mukdaryny üýtgeder. Olary çepe iki boş ýer eden bolsak, her setir setirine indentasiýa üçin iki boşluk goşardyk. Çep gyrada hereket etmek, ähli paddingleriň saklanmagyna sebäp bolar. Sitatalary hasam saga geçirmek hiç hili täsir etmez we mundan beýläk indentasiýa goşmaz. Tekst bloklary deslapky syn aýratynlygy hökmünde JDK 13-e girizildi. Bu olaryň entek degişli Java dil spesifikasiýasyna goşulmaýandygyny aňladýar. Thisagny, bu aýratynlygyň diliň hemişelik bölegine öwrüljekdigi ýa-da bu ýerde diňe myhman boljakdygy belli däl. Häzirki wagtda döredijiler bu aýratynlygy synap we bu barada öz pikirlerini berip bilerler. Tekst bloklarynyň ykbaly oňa bagly bolar: aýratynlyk gowulaşyp biler, halamaýan bolsaňyz, düýbünden aýrylyp bilner. Iş ýüzünde tekst bloklaryny synap görmek isleseňiz, düzmek we işlemek üçin deslapky syn aýratynlyklarynyň aç-açan bolmalydygyny ýadyňyzdan çykarmaň. Ilygyndy:

javac --enable-preview --release 13 TextBlock.java
Programmany işletmek üçin deslapky aýratynlyklary işjeňleşdirmeli:

java --enable-preview TextBlock
Synpda Stringbu dil üýtgemeginiň üstüni ýetirýän üç sany täze usul bar:
  • formatted(): Setiriň özüni format setiri hökmünde ulanyň. Bir kynçylyk bilen deňdirformat(this, args)
  • stripIndent(): Setirden tötänleýin boşluklary aýyrýar. Köp setirli setirleri okaýan bolsaňyz we aç-açan beýannama bilen bolşy ýaly giňişlikden çykarmak isleseňiz bu peýdalydyr.
  • translateEscapes()\ r: Degişli icunikod bahasyna terjime edilen gaçmak yzygiderliligi (ýaly) bir setiri gaýtarýar .
Bu usullaryň ýaňy peýda bolandygy gyzykly, ýöne eýýäm könelişen hökmünde bellendi ... bu ýagdaý olaryň JDK-nyň geljekki wersiýasynda aýrylyp bilinjekdigini görkezýär. Täze usul goşmak we derrew terk etmek birneme geň görünýär. Şeýle-de bolsa, bu usullaryň üýtgedilip ýa-da aýrylyp bilinjek deslapky aýratynlyk bilen baglanyşyklydygyny ýadyňyzdan çykarmaň. Belki, düşündiriş girizmek @PreviewFeatureşeýle ýagdaýlara kömek eder, ýöne entek JDK-a goşulmaýar (ähtimallygy ýokary bolsa-da JDK 14-de peýda bolar).

JEP 354 : Geçiş aňlatmasy (Öňünden syn)

Java 12, kommutasiýa beýany - JEP 325 bilen ýazuw aňlatmalarynyň täze görnüşi üçin teklip hödürledi . Ilkinji deslapky syn aýratynlygy boldy we ykbaly ulanyjylara teklip hödürlemegiň ajaýyp pikirdigini subut edýär. JDK 12-den öň, switchdiňe bir hereketi ýerine ýetirýän, ýöne netije bermeýän jümle hökmünde ulanylyp bilner. switchJavaöne Java 12-de üýtgeýjä bellenip bilinjek netijäni görkezýän aňlatma hökmünde ulanylmagyna rugsat berdi . Içinde kazyýet işleriniň sintaksisine başga üýtgeşmeler girizildi switch. Munuň nähili işleýändigine düşünmek üçin JEP-den bir mysala seredeliň.
int numberOfLetters;
switch(dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
    numberOfLetter = 6;
    break;
  case TUESDAY
    numberOfLetter = 7;
    break;
  case THURSDAY
  case SATURDAY
    numberOfLetter = 8;
    break;
  case WEDNESDAY
    numberOfLetter = 9;
    break;
  default:
   throw new IllegalStateException("Huh?: " + day);
}
dayOfWeekBu mysalda, baha bellemek üçin bahany ulanýarys numberOfLetters. Operatoryň işiniň aýratynlyklary sebäpli switchbu kod iň owadan däl we ýalňyşlyk goýbermek aňsat. Ilki bilen, kazyýet bellikleriniň her toparyna bir jümle ulanmagy ýatdan çykarsak break, indiki ýazgy bellikleriniň toparyny ýerine ýetireris. Bu tapmak kyn bolan ýalňyşlyklara sebäp bolup biler. Ikinjiden, bellikleriň her toparyny kesgitlemeli. Forgetatdan çykarsak, elbetde, düzüjiniň ýalňyşlygyny alarys, ýöne bu opsiýa ideal däl. Kodumyz hem gaty manyly, sebäbi her bir bahanyň dayOfWeeköz belgisi bolmaly. Täze sintaksis ulanyp, has arassa we az ýalňyş kody alýarys:
int numberOfLetters = switch (dayOfWeek) {
   case MONDAY, FRIDAY, SUNDAY -> 6;
   case TUESDAY -> 7;
   case THURSDAY, SATURDAY -> 8;
   case WEDNESDAY -> 9;
   default -> throw new IllegalStateException("Huh?: " + day);
};
Indi ýumuşy diňe bir gezek etmeli (aňlatmanyň yzyna gaýtaryş switchbahasyndan) we iş ýazgylary üçin vergul bilen bölünen sanawy ulanyp bileris. Operatory ulanmaýandygymyz sebäpli break, onuň bilen baglanyşykly problemalary ýok edýäris. Sintaksis aňlatmasy switchköne stil sintaksisini ulanmaga mümkinçilik berýär, şonuň üçin JDK 12-de muny şeýle ýazyp bileris:
int numberOfLetters = switch (dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
   break 6;
  case TUESDAY
   break 7;
  case THURSDAY
  case SATURDAY
   break 8;
  case WEDNESDAY
   break 9;
  default:
   throw new IllegalStateException("Huh?: " + day);
};
Java jemgyýetiniň pikiriçe, breakyzyna gaýtaryş bahasyny kesgitlemek üçin artykmaç ýüklemek bulaşyk bolup biler. Java dili , şertsiz bökmek operatory ýaly bellik bilen break(we ) ulanmaga mümkinçilik berýär . JEP 354 bu ulanylyşy üýtgetdi , şonuň üçin Java 13-de kodumyz birneme üýtgeýär: continuegotobreak
int numberOfLetters = switch (dayOfWeek) {
  case MONDAY:
  case FRIDAY:
  case SUNDAY:
   yield 6;
  case TUESDAY
   yield 7;
  case THURSDAY
  case SATURDAY
   yield 8;
  case WEDNESDAY
   yield 9;
  default:
   throw new IllegalStateException("Huh?: " + day);
};
Indiki üç JEP Java Wirtual Machine bilen baglanyşykly.

JEP 350 Dinamiki CDS arhiwi

Bu giňeltme, Java programmasynyň ýerine ýetirilişiniň ahyrynda sapaklary dinamiki arhiwlemäge mümkinçilik berýär. class data sharingCDS ýa-da synp maglumatlary paýlaşmak, başlangyçda başlanan ähli synplary şol bir synplaryň sanawyny ulanyp, ýörite arhiwde jemlemäge mümkinçilik berýär . Bu programmalary işe girizmekde we RAM tygşytlamakda ep-esli tizlenmä getirýär. Ondan öň “AppCDS” -i ulanmak köp basgançakly iş bolup, degişli synplaryň sanawyny döretmegi we soňraky işlerde ulanyljak arhiw döretmek üçin şol sanawy ulanmagy öz içine alýardy. ArchiveClassesAtExitIndi talap edilýän zat , arhiwiň ýazyljak ýerini görkezýän baýdak -XX: baýdak . Bu çemeleşme bilen, programma adaty togtadylandan soň sapaklar awtomatiki usulda arhiwde gaplanýar.

JEP 351 ZGC : Ulanylmaýan ýat

Bir ýyl ozal JDK 11 eksperimental, ulaldylyp bilinýän we pes gijeki zibil ýygnaýjy ZGC-ni hödürledi. Ilki bilen ZGC gaty geň hereket etdi: zerur bolmasa-da ýadyň operasiýa ulgamyna gaýtarylmagyna ýol bermedi. Konteýnerler ýaly käbir gurşawlar üçin bir wagtyň özünde birnäçe hyzmatlar tarapyndan ulanylýan çeşmeler üçin bu ulgamyň göwrümini we netijeliligini çäklendirip biler. ZGC üýşmesi ZPages diýilýän zatlardan durýar. ZPages hapa ýygnamak siklinde arassalananda, ZPageCache-e gaýtarylýar. Bu keşdäki ZPages, ýaňy-ýakynda ulanylandygy boýunça sargyt edilýär. Java 13-de ZGC uzak wagtlap ulanylmaýandygy anyklanan sahypalary operasiýa ulgamyna gaýtaryp berer. Şeýlelik bilen, beýleki amallar üçin gaýtadan ulanylyp bilner.

JEP 353 Miras Socket API-ni durmuşa geçiriň

API amallarynyň ikisi java.net.Socket- java.net.ServerSocketde JDK 1.0. Onda we ondan soňky ähli JDK-larda, bu API-leriň durmuşa geçirilmegi çeýe we saklamak kynlaşdyrýan birnäçe usuly ulanýar (meselem, sapak stakasyny I / O buferi hökmünde ulanmak). Bu meseläni çözmek üçin JDK 13-de täze durmuşa geçiriş berildi NioSocketImpl. Indi dürli platformalara çykmagy aňsatlaşdyrýan ýerli kod talap etmeýär. Bu synp, şeýle hem bar bolan bufer keş keş mehanizmini ulanýar (bu maksat üçin sapak sapagyny ulanmazlyk) we java.util.concurrentsinhronlaşdyrylan usullary däl-de, gulplamagy. Bu, “Project Loom” süýümleri bilen integrasiýany aňsatlaşdyrar .

Täze API-ler

Java 13-iň esasy synp kitaphanalarynda 76 sany täze API-ni öz içine alýandygyny öňem aýdypdyk. Olar aşakdaky ugurlary öz içine alýar:
  • Icunikod goldaw täzelenmeleri.
  • StringTekst bloklaryny goldamagyň üç täze usuly (ýokardaky JEP 255 düşündirişine serediň).
  • Sapaklarda java.nioindi mutlak (garyndaşlardan tapawutlylykda) getwe set-методы. Они, How и базовый абстрактный класс Buffer, включают метод slice() для извлечения части буфера.
  • Метод force() класса MappedByteBuffer принудительно записывает раздел буфера в его резервное хранorще.
  • nio.FileSystem добавляет три новые перегруженные формы newFileSystem() для доступа к содержимому file How файловой системы.
  • В javax.annotation.processing.ProcessingEnvironment появился новый интересный метод. isPreviewEnabled(). Он сообщит о том, включены ли preview-фичи. Это интересно потому, что упомянутая выше annotation @PreviewFeature не будет доступна до выхода JDK 14.
  • DocumentBuilderFactory и SAXParserFactory в javax.xml.parsers получают три новых метода для создания экземпляров, поддерживающих пространство имен.
Материал основан на статье Саймона Риттера и официальной documentации.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION