JavaRush /Java Blog /Random-TK /Java 11 çykdy: täze aýratynlyklar we mümkinçilikler

Java 11 çykdy: täze aýratynlyklar we mümkinçilikler

Toparda çap edildi
Ondan öň Java-yň täze wersiýalary seýrek we gijikdirilende ýüze çykýardy. Indi “Oracle” özüniň döreden ritmini üstünlikli dowam etdirýär: “her alty aýdan täze Java”. Şeýlelik bilen birnäçe gün ozal, tertip boýunça, ahyrsoňy Java SE 11 we JDK (Java Development Kit) ýerine ýetirilişini aldyk . Java 11 çykdy: täze aýratynlyklar we mümkinçilikler - 1Hemişe bolşy ýaly, täze wersiýa köne wersiýalara gabat geler we Java 11-e goldaw 2026-njy ýylyň dekabryndan gijä galmaz.

Java SE 11-de täze aýratynlyklar (döredijiler üçin görünýär)

Java-da “JDK Enhancement Teklip” JEP-iň ýerine ýetirilmegi arkaly üýtgeşmeleriň edilýändigini ýadyňyzdan çykarmaň. JEP OpenJDK-ny gowulandyrmak baradaky teklip bolup, tassyklanylyp, gijikdirilip ýa-da ret edilip bilner. .Agny, aslynda JEP-leriň ýygyndysy OpenJDK üçin ösüş strategiýasydyr. Täze “aýratynlykdan” öň kwadrat ýaýlarda degişli JEP-iň sanyny görkezeris. [323] Lambda parametrleri üçin ýerli üýtgeýän sintaksis - lambda parametrleri üçin var sintaksis Java 10 ýerli üýtgeýäniň görnüşini aç-açan kesgitlemezlige mümkinçilik berýän var açar sözüni girizdi . Bu kody ýönekeýleşdirdi. JEP 323 bu sintaksisiň lambda aňlatmalary bilen ulanylyşyny giňeldýär. Pleönekeý mysal:
list.stream ()
                 .map ((var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
Meşhur Java hoşhabarçysy Simon Ritteriň ýazyşy ýaly , tejribeli Java programmist bu ýagdaýda var ulanmagyň zerur däldigini bellär, sebäbi ýokardaky kody aşakdakylar bilen çalşyp bolar:
list.stream ()
                  .map (s -> s.toLowerCase ())
                  .collect (Collectors.toList ());
Onda näme üçin goldaw bar? Diňe bir aýratyn ýagdaý bar - lambda parametrine düşündiriş goşmak isleseňiz. Munuň haýsydyr bir görnüşi bolmazdan edilip bilinmez we aç-açan görnüşi ulanmazlyk üçin, var ýaly zatlary ulanyp hemme zady aňsatlaşdyryp bileris:
list.stream ()
                 .map ((@ Notnull var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
] _ Käwagt bu täze doglan çagalary gorkuzýar. Diňe " Salam Dünýä! " Çap edýän programma ýazmak üçin. ", umumy statiki esasy usul bilen synp ýazmaly voidwe ulanmaly System.out.println. Muny edeniňizden soň, javac ulanyp kod düzmeli . Ahyrynda, şondan soň betbagt gutlagy görkezjek programmany işe girizip bilersiňiz (elbetde, IDEA-nyň we JavaRush -da gurlan integrirlenen ösüş gurşawy , bu “programma açylyş jadysyny” özbaşdak ýerine ýetirýär - redaktoryň belligi) ). Dogrusyny aýtsak: programmirleme dilleriniň köpüsinde programmalary işletmek üçin hakyky skript has ýönekeý görünýär. JEP 330 bir faýlly programma düzmek zerurlygyny aradan aýyrýar, indi buýruk setirini ulansaňyz ýazyň
java HelloWorld.java
Java işlediji faýlyň Java deslapky kodunyň bardygyny anyklar we ýerine ýetirmezden ozal kody synp faýlyna düzer. Parametrleri deslapky kod faýlyň adyndan soň ýa-da öňünden goýup bilersiňiz. Adyndan soň goýlanlar, programma ýerine ýetirilende parametrler hökmünde geçirilýär. Adyň öňünden goýlanlar, kod düzülenden soň Java işledijisine parametr hökmünde geçirilýär. Kompilýatorlara mahsus opsiýalar (synp ýoly ýaly) hem düzmek üçin javac -a geçiriler . Mysal. Setir:
java -classpath / home / foo / java Hello.java Bonjour
şu setirlere deň bolar:
javac -classpath / home / foo / java Hello.java
java -classpath / home / foo / java Hello Bonjour
[321] HTTP Müşderi (Standard) - HTTP Müşderi API goldawy standartlaşdyryldy. JDK 9, HTTP Müşderi protokolyny (JEP 110) goldamak üçin täze API hödürledi . JDK 9 Java platforma modul ulgamyny (JPMS) hem hödürländigi sebäpli, bu API inkubator moduly hökmünde girizildi (bular "janly" API-ler işleýän wagtynda Java SE-de entek standartlaşmadyk täze API-ler bilen üpjün edijileri üpjün etmek üçin modullardyr) aýyrmak üçin taýýar - döredijiler täze API-leri synap görüp we seslenme bermäge synanyşyp bilerler). Zerur üýtgeşmeler girizilenden soň (bu API JDK 10-da täzelendi), API standartyň bir bölegi bolup biler. Şeýlelikde, HTTP Müşderi API indi resmi taýdan Java SE 11-e goşuldy . Bu, JDK, java.net.http üçin täze modul we bukja hödürleýär . Esasy täze görnüşler: HttpClient HttpRequest HttpResponse WebSocket Bu API sinhron ýa-da asynkron görnüşde ulanylyp bilner. Asynkron re modeimde we ulanylýar . [320] Java EE we CORBA modullaryny aýyryň Java platformasynyň dokuzynjy wersiýasynda Java platforma modul ulgamynyň (JPMS) ornaşdyrylmagy bilen monolit rt.jar faýlyny birnäçe modula bölmek mümkin boldy . Mundan başga-da, JPMS size diňe programmaňyz üçin zerur modullary öz içine alýan Java iş wagtyny döretmäge mümkinçilik berýär we göwrümini ep-esli azaldýar. Aç-açan kesgitlenen modul araçäkleri bilen, Java API-iň köne böleklerini aýyrmak has aňsat - JEP 320 şeýle edýär. Java.se.ee metamodulyna Java SE 11 standartynyň bir bölegi bolmadyk we goşulmajak alty sany modul girýär. JDK-da: CompletionFuturesCompletionStages
  • corba
  • geleşik
  • işjeňleşdirmek
  • xml.bind
  • xml.ws
  • xml.ws.annotasiýa
Bu modullar JDK 9-da köneldi we düzmek ýa-da ýerine ýetirmek üçin deslapky görnüşde goşulmady. Bu, bu modullaryň API-lerini JDK 9 ýa-da JDK 10-da ulanýan programma düzmäge ýa-da işletmäge synanyşan bolsaňyz, şowsuz bolandygyny aňladýar. Bu modullaryň API-lerini koduňyzda ulanýan bolsaňyz, olary aýratyn modul ýa-da kitaphana hökmünde üpjün etmeli bolarsyňyz.

Täze API-ler

JDK 11-de köp sanly täze API , HTTP Müşderi we Uçuş ýazgy modullarynyň dil standartyna girizilmegi netijesinde peýda boldy . API-leriň doly sanawy üçin Gunnar Morling tarapyndan düzülen JDK-nyň dürli wersiýalarynyň aşakdaky giňişleýin deňeşdirmesine serediň . Bu bellikde java.net.http , jdk.jfr we java.security modullaryna girmeýän käbir täze usullary sanap geçeris . java.lang.String JDK 11 API-de String-iň iň möhüm üýtgeşmelerinden biri, birnäçe peýdaly täze usul bar .
  • boolean isBlank (): setir boş bolsa ýa-da diňe boş ýerleri bar bolsa, başgaça ýalňyş.

  • Stream lines(): Setir terminatorlary bilen bölünen bu setirden alnan setirleriň akymyny görkezýär.

  • String repeat (int): Gymmatlygy şol setiriň int gezek gaýtalanmagy bolan bir setiri görkezýär .

  • String strip (): Ilkinji boşluk belgisinden öň ýa-da soň aýrylan ähli boşluklar bilen bir setiri görkezýär.

  • String stripLeading (): Spacehli boşluklar bilen birinji boşluk belgisi aýrylýança bir setir görkezýär.

  • String stripTrainling (): Iň soňky boşluk belgisi aýrylandan soň ýüze çykýan ähli boşluklar bilen bir setiri görkezýär.
strip()Usul eýýäm şuňa meňzeş bir zat etdi trim (), ýöne boşluklar boýunça bu usullar dürli zatlary aňladýar. Şeýle bolsa, trim()diňe boşluklar kesilýär we içinde strip()- goýmalar ýaly ýörite nyşanlaram bar. java.lang.StringBuffer java.lang.StringBuilder Bu synplaryň ikisinde - de compareTo ()kabul edýän we gaýdyp gelýän täze usul bar . Leksiki deňeşdirme usuly täze usula meňzeýär . java.io.ByteArrayOutputStreamStringBufferStringBuilderintcompareTo() CharSequence
  • void writeBytes (byte []): parametriň ähli baýtlaryny java.io.FileReader çykyş akymyna ýazýar
Bu ýerde kesgitlemäge mümkinçilik berýän iki sany täze konstruktor bar Charset. java.io.FileWriter T kesgitlemäge mümkinçilik berýän dört sany täze konstruktor Charse. java.io.InputStream
  • io.InputStream nullInputStream (): gaýdyp gelýär InputStream, hiç bir baýt okamaýar. Bu usuly nädip ulanmaly? Gerek däl önümi taşlamak ýa-da hemişe nol baýtlary yzyna gaýtarmak üçin / dev / null ýaly bir zat diýip pikir edip bilersiňiz.
java.io.OutputStream
  • io.OutputStream nullOutputStream ()
java.io.Reader
  • io.Reader nullReader ()
java.io.Writer
  • io.Writer nullWriter ()
java.lang
  • String toString (int): Bu bar bolan usulyň artykmaçlygy, ýöne char ýerine int ulanýar.
java.lang.CharSequence
  • int compare (CharSequence, CharSequence): leksikografiki taýdan iki mysaly deňeşdirýär CharSequence. Birinji yzygiderlilik leksikografiki taýdan degişlilikde ikinjisinden az, deň ýa-da uly bolsa, otrisatel bahany, noly ýa-da polo positiveitel bahany görkezýär.
java.lang.ref. salgylanma
    lang.Object clone (): Java hoşhabarçysy Simon Ritter bu usulyň özüni bulaşdyrýandygyny boýun aldy. Synp Referenceinterfeýsi amala aşyrmaýar Cloneablewe bu usul elmydama kadadan çykma döreder CloneNotSupportedException. Şeýle-de bolsa, hünärmen bu usulyň geljekde bir zat üçin peýdaly boljakdygyny öňe sürýär.
java.lang.Runtime java.lang.System Bu ýerde täze usul ýok. runFinalizersOnExit ()Utgaşyklyk meselelerine sebäp bolup biljek usulyň bu synplaryň ikisinden aýrylandygyny belläliň . java.lang.Threaddestroy () Goşmaça usullar ýok, diňe olaryň stop (Throwable)aýrylandygyny belläris . Şeýle-de bolsa stop (), hiç hili argument almaýar. Utgaşyk meselesi bolup biljekdigi sebäpli muny ýadyňyzdan çykarmaň. java.nio.ByteBuffer java.nio.CharBuffer java.nio.DoubleBuffer java.nio.FloatBuffer java.nio.LongBuffermismatch () java.nio . bufer bilen berlen buferiň arasynda ilki gabat gelmezlik. java.nio.channels.SelectionKey
  • int interestOpsAnd (int)

  • int interestOpsOr (int)
java.nio.channels.Selector
  • int select (java.util.function.Consumer, long): Degişli kanallar I / O amallaryna taýyn düwmelerde hereket saýlaýar we ýerine ýetirýär. Uzyn parametr gutarýar.

  • int select (java.util.function.Consumer): ýokardaky usul ýaly işleýär, ýöne wagty gutarman.

  • int selectNow (java.util.function.Consumer): ýokardaky usul ýaly işleýär, diňe blokirlemeýär.

java.nio.file.Faýllar
  • String readString (Path): UTF-8 kodlamagy ulanyp, bir faýldan ähli mazmuny bir setire okaýar .

  • String readString (Path, Charset): Aboveokardaky usul ýaly işleýär, ýöne ulanylýan nyşanlara baýtlary kodlaýar Charset.

  • Path writeString (Path, CharSequence, java.nio.file. OpenOption []): Bir faýla nyşanlaryň yzygiderliligini ýazsaňyz CharSequence, şol nyşanlar baýtlara kodlanar ( UTF-8 ulanyp ).

  • Path writeString (Path, CharSequence, java.nio.file. Charset, OpenOption []): ýokardaky usul ýaly işleýär, diňe simwollar ulanylýan baýtlara kodlanýar Charset.
java.nio.file.Path
  • Path (Setir, Setir []): Birleşdirilen mahaly ýol emele getirýän ýoly ýa-da setirleriň yzygiderliligini üýtgedip, ýoly yzyna getirýär.

  • Athol (net.URI): URI-ni üýtgedip ýoly yzyna getirýär.
java.util.Collection
  • Object [] toArray (java.util.function.IntFunction): Yza gaýdyp gelen massiwi paýlamak üçin berlen generator funksiýasyny ulanyp, bu ýygyndydaky ähli elementleri öz içine alýan bir massiw görkezýär.
java.util.concurrent.PriorityBlockingQueue java.util.PriorityQueue
  • void forEach (java.util.function.Consumer): Elementhli elementler gaýtadan işlenýänçä ýa-da hereket kadadan çykma bolýança, her Iterable elementinde görkezilen hereketi ýerine ýetirýär .

  • boolean removeAll (java.util.Collection): Görkezilen kolleksiýadaky (islege görä amal) bu ýygyndynyň ähli elementlerini aýyrýar.

  • boolean removeIf (java.util.function.Predicate): Berlen predikany kanagatlandyrýan bu ýygyndynyň ähli elementlerini aýyrýar.

  • boolean retainAll (java.util.Collection): Bu ýygyndyda görkezilen ýygyndyda (goşmaça amal) diňe elementleri saklaýar.
java.util.concurrent.TimeUnit
  • long convert (java.time.Duration): Berlen wagtyň dowamlylygyny bu bölüme öwürýär.
java.util.function.Predicate
  • Predicate not(Predicate): berlen predikatyň ýatyrylmagy bolan predikaty yzyna berýär.
Mysal üçin, aşakdaky kod:
lines.stream ()

.filter (s ->! s.isBlank ())
öwrüp bolar:
lines.stream ()

.filter (Predicate.not (String :: ISBLANK))
statiki importdan peýdalanýan bolsak, alýan zadymyz şu:
lines.stream ()
.filter (not(String :: ISBLANK))
java.util.Optional java.util.OptionalInt java.util.OptionalDouble java.util.OptionalLong
  • boolean isEmpty (): Bahasy ýok bolsa dogry , başgaça ýalan .
java.util.regex.Pattern
  • Predicate asMatchPredicate (): Java hünärmeni Simon Ritter, bu ýerde gizlenen hakyky JDK 11 API gymmat bahaly daşyň bolup biljekdigine ynanýar.
java.util.zip.Deflater
  • int deflate (ByteBuffer): Giriş maglumatlaryny gysýar we görkezilen buferi gysylan maglumatlar bilen doldurýar.

  • int deflate (ByteBuffer, int): Giriş maglumatlaryny gysýar we görkezilen buferi gysylan maglumatlar bilen doldurýar. Gysylan maglumatlaryň hakyky mukdaryny görkezýär.

  • void setDictionary (ByteBuffer): Berlen sözlügi berlen buferdäki baýtlara gysmak üçin düzýär. ByteBufferBu, häzirki wagtda baýt massiwini däl-de, kabul edip bilýän bar bolan usulyň artykmaçlygydyr .

  • void setInput (ByteBuffer): Giriş maglumatlarynyň gysylmagyny düzýär. Şeýle hem bar bolan usulyň artykmaçlygydyr.
java.util.zip.Inflater
  • int inflate (ByteBuffer): Görkezilen buferde baýtlary açýar. Dykylmadyk baýtlaryň hakyky sanyny görkezýär.

  • void setDictionary (ByteBuffer): Berlen sözlügi berlen buferdäki baýtlara düzýär. Bar bolan usulyň artykmaç görnüşi.

  • void setInput (ByteBuffer): Giriş maglumatlaryny dekompressiýa üçin düzýär. Bar bolan usulyň artykmaç görnüşi.
javax.print.attribute.standard . javax.swing.DefaultComboBoxModel javax.swing.DefaultListModel
  • void addAll (Collection): Theygyndyda bar elementleri goşýar.

  • void addAll (int, Collection): Görkezilen indeksden başlap, ýygyndyda bar elementleri goşýar.
javax.swing.ListSelectionModel
  • int [] getSelectedIndices (): Saýlanan modeldäki saýlanan indeksleriň toplumyny ýokarlanýan tertipde görkezýär.

  • int getSelectedItemsCount (): Saýlanan elementleriň sanyny görkezýär.
jdk.jshell.EvalException
  • shell.JShellException getCause (): Bu EvalException tarapyndan görkezilen ýerine ýetiriş müşderisinde atylýan sebäbini görkezýär, ýa-da sebäbi ýok bolsa ýa-da näbelli bolsa, null.

Java 11-iň dörediji däl aýratynlyklary

[181] Höwürtge esasly elýeterliligi dolandyrmak Java we beýleki diller içerki synplar arkaly ýerleşdirilen synplary goldaýar. Munuň işlemegi üçin düzüji belli bir hileleri ýerine ýetirmeli. Mysal üçin:
public class Outer {
    private int outerInt;

     class Inner {
       public void printOuterInt() {
         System.out.println("Outer int = " + outerInt);
       }
     }
   }
Düzüji, düzmezden ozal aşakdaky ýaly bir zat öndürmek üçin muny üýtgedýär:
public class Outer {
      private int outerInt;

      public int access$000() {
        return outerInt;
      }

    }


    class Inner$Outer {

      Outer outer;

      public void printOuterInt() {
        System.out.println("Outer int = " + outer.access$000());
      }
    }
Logiki taýdan içerki synp daşarky synp bilen birmeňzeş koduň bir bölegi bolsa-da, aýratyn synp hökmünde düzülýär. Şonuň üçin bu amal, daşarky synpyň hususy meýdanyna girmek üçin düzüji tarapyndan döredilmeli sintetiki birleşme usulyny talap edýär . Bu JEP höwürtge düşünjesini hödürleýär, şol bir höwürtgäniň iki agzasy (mysalymyzda daşarky we içki) dostlary höwürtgeleýär. Synp faýl formaty üçin iki sany täze atribut kesgitlenildi: NestHost we NestMembers . Bu üýtgeşmeler, içerki synplary we bytekody goldaýan beýleki diller üçin peýdalydyr. Bu funksiýa java.lang.Class üçin üç sany täze usuly hödürleýär : Class getNestHost () Class [] getNestMembers () boolean isNestmateOf (Class) [309] Dinamiki Klass-Faýl yzygiderliligi Bu JEP täze goldaw üçin synp faýl formatyna giňeltmäni suratlandyrýar dowamly howuz görnüşi CONSTANT_Dynamic. Dinamiki üýtgewsiz ideýa oksimoron ýaly bolup görünýär, ýöne aslynda ony Java 11-de iň soňky baha diýip pikir edip bilersiňiz. Basseýniň hemişelik bahasy (beýleki yzygiderliliklerden tapawutlylykda) kesgitlenmeýär, ýöne bootstrap ulanýar gurşun wagtynda bahany kesgitlemegiň usuly. Şonuň üçin baha dinamiki, ýöne gymmaty diňe bir gezek kesgitlenenligi sebäpli, ol hem hemişelikdir. Bu aýratynlyk, ilkinji nobatda, JVM-de işlemek üçin bytekodlary we synp faýllaryny döredýän täze dilleri we düzüjileri ösdürýän adamlara gönükdirilendir. [315] Aarch64 içerki mazmunyny gowulandyrmak Bu JEP Red Hat jemgyýeti tarapyndan teklip edildi. JVM indi Arm 64 görkezme toplumynda bar bolan has ýöriteleşdirilen görkezmeleri ulanyp biler, esasanam, busin () usullaryň we cos ()java.lang.Math log ()synpynyň işleýşini gowulandyrýar . ] _ _ _ Epsilon aslynda hapa ýygnamaýandygy üçin adaty däl! Täze obýektler döredilende, zerur bolsa ýady bölýär, ýöne hasaba alynmadyk obýektleriň tutýan ýerini yzyna almaýar. “ Näme? ", - diýip soraýarsyňyz. Görnüşi ýaly, bu “zibil ýygnamagyň” iki ulanylyşy bar:
  1. Ilki bilen bu zibil ýygnaýjy, täze GC algoritmleriniň öndürijilik täsiri nukdaýnazaryndan baha berilmegini üpjün etmek üçin döredildi. Maksat, Epsilon bilen nusga programmasyny işletmek we ölçegler toplumyny döretmek. Zibil ýygnamak täze algoritmi işledilýär, şol bir synaglar geçirilýär we netijeler deňeşdirilýär.

  2. Örän gysga ýumuşlar üçin (bulutda serwersiz funksiýalary pikir ediň), üýşmek üçin bölünen ýadyňdan geçmejekdigiňize kepil geçip bilersiňiz. Bu, programma kodyndaky üstünden (kollektoryň işlemelidigini kesgitlemek üçin zerur statistiki maglumatlary ýygnamak bilen) öndürijiligi gowulaşdyryp biler. Toplum boş bolsa, JVM üç usulyň birinde ýalňyş düzülip bilner:
    • Adaty diýilýär OutOfMemoryError.
    • Üýşmegi täzeden düzüň
    • JVM gaty diski şowsuz boldy we başga bir işi ýerine ýetirip biler (meselem, düzediji düzeltmek).
[328]: Uçuş ýazgysy Uçuş ýazgysy JVM üçin pes derejeli maglumat almagyň çarçuwasydyr. JDK 11-den öň bu Oracle JDK ikili söwda nokadydy. Oracle indi Oracle JDK bilen OpenJDK-dan bir gurluşyň arasyndaky funksional tapawudy aradan aýyrýar. Uçuş ýazgysynyň edýän zady :
  • Wakalar hökmünde maglumatlary öndürmek we sarp etmek üçin API üpjün edýär
  • Bufer mehanizmini we ikilik maglumat formatyny üpjün edýär
  • Wakalary özleşdirmäge we filtrlemäge mümkinçilik berýär
  • OS, JVM HotSpot we JDK kitaphanalary üçin wakalary üpjün ediň
Bu ýerde iki sany täze modul bar: jdk.jfr we jdk.management.jfr . [329] ChaCha20 we Poly1305 kriptografiki algoritmler Bu JEP , JDK tarapyndan ulanylýan şifrleri täzelemek barada . Bu ýagdaý, RFC 7539-da görkezilişi ýaly, ChaCha20 we ChaCha20-Poly1305 şifrlemek algoritmlerini amala aşyrýar. ChaCha20 köne, ygtybarly RC4 şifrini çalşyp biljek birneme täze akym şifridir . [333] ZGC: Giňeldilip bilinýän pes giçlik zibil ýygnaýjy . Uly (multigigabaýt) üýşmegi we pes gijä galmagy talap edýän programmalar bilen ulanmak üçin niýetlenendir. Generationeke nesil üýşmesini ulanýar we zibil ýygnamak işleriniň köpüsini (ýöne hemmesi däl) programma bilen bir wagtda ýerine ýetirýär. ] _ _ JDK indi bu protokol wersiýasyny goldaýar. Material Simon Ritteriň makalasyna we resmi resminamalara esaslanýar .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION