Java 9 Funkcije in izboljšave



Modularni okvir, razvit v okviru projekta Jigsaw in glavne funkcije Java 9 v tem blogu, so JShell (orodje REPL), pomembne spremembe API-ja in spremembe na ravni JVM.

Izdanje funkcij Java 9 in Java 9 je mejnik za ekosistem Java.Spremljanje novih izdaj je pomembno, da ostanete na tekočem s tehnologijo in razumete potrebo po uvedbi, ki vas bo približala vašemu .Modularni okvir, razvit v okviru Project Jigsaw, bo del te izdaje Java SE, glavne značilnosti tega pa so JShell (orodje REPL), pomembne spremembe API-ja in spremembe na ravni JVM za izboljšanje zmogljivosti in odpravljanja napak JVM.

Preden podrobno razkrijemo funkcije Java 9, si oglejmo prejšnje različice Java in si oglejmo, katere pomanjkljivosti so bile in kako je Java 9 pomagala premagati te nepravilnosti: -





  • Platforma Java Standard Edition in JDK nista bili navigacijski za majhne računalniške naprave
  • JDK ni imel splošne varnosti in vzdrževanja
  • Na splošno ni prišlo do izboljšanja učinkovitosti aplikacije
  • Razvijalcem Java je bilo težko zgraditi in vzdrževati knjižnice kod in večje programe tako za platforme Java SE kot za EE.

V tej objavi v blogu bom funkcije Java 9 razvrstil na naslednji način:



  1. Obdelajte posodobitve API-ja v Javi 9
  2. Odjemalec HTTP / 2 v Javi 9
  3. Java Shell Scripting (Read-Eval-Print-Loop) v Javi 9
  4. Datoteke JAR z več različicami imajo funkcijo Java 9
  5. Funkcija Več posodobitev sočasnosti v Javi 9
  6. Projekt Jigsaw v Javi 9

Kaj je novega v Javi 9?

Izbral sem nekaj novih funkcij Java 9, za katere se mi zdi vredno vedeti. Poglejmo, katere so te značilnosti: -

Obdelajte posodobitve API-ja v Javi 9

Javin procesni API je bil precej primitiven,s podporo samo za zagon novih procesov, preusmerijo izhodne procese in tokove napak. V tej izdaji posodobitve Process API omogočajo naslednje:

  • Pridobivanje PID-ja trenutnega procesa JVM in vseh drugih procesov, ki jih je ustvaril JVM
  • Naštejte procese, ki se izvajajo v sistemu, da dobite informacije, kot so PID, ime in uporaba virov
  • Upravljanje procesnih dreves
  • Upravljanje podprocesov

Oglejmo si vzorčno kodo, ki natisne trenutni PID in trenutne informacije o postopku:



povezljivost zbirke podatkov v javi z mysql
javni razred NewFeatures {public static void main (String [] args) {ProcessHandle currentProcess = ProcessHandle.current () System.out.println ('PID:' + currentProcess.getPid ()) ProcessHandle.Info currentProcessInfo = currentProcess.info () System.out.println ('Info:' + currentProcessInfo)}

Odjemalec HTTP / 2 v Javi 9

Ta funkcija Java 9 naj bi se spremenila v naslednjih izdajah in jo bo morda celo popolnoma odstranila.

Prej Razvijalci se pogosto zatekajo k uporabi knjižnic drugih proizvajalcev, kot so Apache HTTP, Jersey itd. Poleg tega je Javin HTTP API pred specifikacijo HTTP / 1.1 in je sinhron in ga je težko vzdrževati. Zaradi teh omejitev je bilo treba dodati nov API. Novi API odjemalca HTTP ponuja naslednje:

  • Preprost in jedrnat API za obravnavo večine zahtev HTTP
  • Podpora za specifikacijo HTTP / 2
  • Boljše delovanje
  • Boljša varnost
  • Še nekaj izboljšav

Oglejmo si vzorčno kodo za izdelavo zahteve HTTP GET z uporabo novih API-jev. Spodaj je definicija modula, definirana v datoteki module-info.java:

modul newfeatures {zahteva jdk.incubator.httpclient}

Naslednja koda uporablja API odjemalca HTTP, ki je del modula jdk.incubator.httpclient:

import jdk.incubator.http. * import java.net.URI javni razred Http2Feature {public static void main (String [] args) vrže izjemo {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder nov URI (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String response = client.send (request, HttpResponse.BodyHandler.asString ()) System.out.println ('Koda stanja:' + response.statusCode ())
System.out.println ('Telo odziva:' + response.body ())}}}

Java Shell Scripting (Read-Eval-Print-Loop) v Javi 9

Gotovo ste že videli, da se jeziki, kot so Ruby, Scala, Groovy, Clojure in drugi, pošiljajo z orodjem, ki ga pogosto imenujejo REPL ( Read-Eval-Print-Loop ). To orodje REPL je zelo koristno pri preizkušanju jezikovnih funkcij. Na primer, v Scali lahko napišemo preprost program Hello World kot scala> println (“Hello World”)

Nekatere prednosti JShell REPL so naslednji:

  • Izkušeni razvijalci lahko hitro izdelajo prototip in preizkusijo, preden ga sprejmejo v svojo glavno kodno osnovo
  • Razvijalci Java se lahko zdaj pohvalijo z REPL

Zaženimo ukaz JShell, kot je prikazano na naslednji sliki:

Primer JShell Hello World - Java 9 - Edureka

Datoteke JAR z več različicami imajo funkcijo Java 9

Od zdaj lahko datoteke JAR vsebujejo razrede, ki se lahko izvajajo samo v različici Java, za katero so bili prevedeni. Da bi izkoristili nove funkcije platforme Java na novejših različicah, morajo razvijalci knjižnic izdati novejšo različico svoje knjižnice. Kmalu bodo razvijalci vzdrževali več različic knjižnice, kar je lahko nočna mora. Da bi odpravili to omejitev, te funkcije Java 9 datotek JAR z več različicami omogočajo razvijalcem, da gradijo datoteke JAR z različnimi različicami datotek razreda za različne različice Java.Naslednji primer je bolj jasen.

Tu je ponazoritev trenutnih datotek JAR:

koren kozarec - Razred - B.razred - C. razred

Evo, kako izgledajo datoteke JAR z več izdajami:

koren kozarec - Razred - B.razred - C. razred - META-INF - različice - 9 - Razred - 10 - B.razred

Na prejšnji sliki datoteke JAR podpirajo datoteke razredov za dve različici Java - 9 in 10.

Torej, ko se prejšnji JAR izvede na Javi 9, se A.class pod različicami - 9 map pobere za izvedbo.

Na platformi, ki ne podpira datotek JAR z več različicami, se razredi v imeniku različic nikoli ne uporabljajo. Torej, če zaženete datoteko JAR z več različicami na Javi 8, je to dobro kot zagon preproste datoteke JAR.

Funkcija Več posodobitev sočasnosti v Javi 9

V tej posodobitvi je nov razred, java.util.concurrent.Flow je bil uveden z vgnezdenimi vmesniki, ki podpirajo izvajanje okvira za objavo in naročanje. Okvir objavi-naroči razvijalcem omogoča, da izdelajo komponente, ki lahko asinhrono porabijo tok podatkov v živo z nastavitvijo založnikov, ki proizvajajo podatke, in naročnikov, ki podatke porabijo prek naročnine, ki jih upravlja. Štirje novi vmesniki so naslednji:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (ki deluje kot založnik in naročnik).

Projekt Jigsaw v Javi 9

Glavni cilj tega projekta je predstaviti koncept modularnost podporo za ustvarjanje modulov v Javi 9 in nato isto uporabite za JDK to je, modularizirajte JDK .

Nekateri od koristi od modularnost so naslednji:

  • Močna inkapsulacija : Moduli lahko dostopajo samo do tistih delov modula, ki so bili na voljo za uporabo. Javni razredi v paketu torej niso javni, razen če je paket izrecno izvožen v datoteko z informacijami o modulu.
  • Jasne odvisnosti : Moduli morajo s klavzulo »Zahteva« navesti, katere druge module bi uporabljali.
  • Združevanje modulov za ustvarjanje manjšega časa izvajanja, ki ga je mogoče enostavno prilagoditi manjšim računalniškim napravam.
  • Zanesljivo : Aplikacije so z odpravo zanesljivejše čas izvajanja napake . Primer: - mora biti, da vaša aplikacija med izvajanjem ni uspela zaradi manjkajočih predavanj, kar je povzročilo ClassNotFoundException .

Obstajajo različne JEP-ji , ki so del tega projekta, in sicer:

  • JEP 200 - modularni JDK : To uporablja sistem modulov platforme Java za modularizacijo JDK v niz modulov, ki jih je mogoče kombinirati med prevajanjem, časom gradnje ali izvajanjem.
  • JEP 201 - modularna izvorna koda : To modularizira izvorno kodo JDK v module in izboljša orodja za sestavljanje modulov.
  • JEP 220 - modularne izvajalne slike : S tem se preoblikujejo izvajalne slike JDK in JRE, da se prilagodijo modulom in izboljša zmogljivost, varnost in vzdrževanje.
  • JEP 260 - inkapsulira večino notranjih API-jev : To omogoča dostop do številnih notranjih API-jev neposredno ali prek refleksije. Dostop do notranjih API-jev, ki se bodo gotovo spremenili, je precej tvegan. Da bi preprečili njegovo uporabo, so vključeni v module in na voljo so le tisti interni API-ji, ki se pogosto uporabljajo, dokler ustrezen API ni na svojem mestu.
  • JEP 261 - modulni sistem : To implementira specifikacijo sistema modula Java s spremembo programskega jezika Java, JVM in drugih standardnih API-jev
  • JEP 282: jlink, povezovalnik Java : To omogoča pakiranje modulov in njihovih odvisnosti v krajši čas delovanja.

Torej, vse je bilo v zvezi z Java 9 in novimi funkcijami Java 9.

Zdaj, ko ste razumeli funkcije Java 9, si oglejte Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, razširjenih po vsem svetu.

G ali vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje tega bloga 'Java 9', in takoj, ko bo mogoče, se bomo oglasili.