prominent java 8 features with code examples
Sveobuhvatan popis i objašnjenje svih istaknutih značajki predstavljenih u izdanju Java 8 sa primjerima:
Izdanje Java 8 iz Oraclea bilo je revolucionarno izdanje 1. svjetske razvojne platforme. Uključivao je veliku nadogradnju Java programskog modela u cjelini, zajedno s razvojem JVM-a, Java jezika i knjižnica na koordiniran način.
Ovo je izdanje uključivalo nekoliko značajki za jednostavnost upotrebe, produktivnost, poboljšano programiranje poliglota, sigurnost i sveukupno poboljšane performanse.
Što ćete naučiti:
- Značajke dodane izdanju Java 8
- Funkcionalna sučelja i Lambda izrazi
- forEach () metoda u Iterable sučelju
- Neobvezna klasa
- Zadane i statičke metode u sučeljima
- Reference o metodama
- Java Stream API za skupne podatkovne operacije na zbirkama
- Java Date Time API
- JavaScript motor nosoroga
- Dekodiranje kodiranja Base64
- Poboljšanja API-ja zbirke
- Izmjene / poboljšanja API-ja istodobnosti
- Poboljšanja Java IO-a
- Razna osnovna poboljšanja API-ja
- Zaključak
Značajke dodane izdanju Java 8
Među glavnim promjenama slijede značajne značajke koje su dodane ovom izdanju.
- Funkcionalna sučelja i Lambda izrazi
- metoda forEach () u Iterable sučelju
- Fakultativna nastava,
- zadane i statičke metode u sučeljima
- Reference o metodama
- Java Stream API za skupne podatkovne operacije na zbirkama
- Java Date Time API
- Poboljšanja API-ja zbirke
- Poboljšanja API-ja za istodobnost
- Poboljšanja Java IO-a
- JavaScript motor nosoroga
- Dekodiranje kodiranja Base64
- Razna poboljšanja Core API-ja
U ovom uputstvu kratko ćemo razmotriti svaku od ovih značajki i pokušati objasniti svaku od njih uz pomoć jednostavnih i lakih primjera.
Funkcionalna sučelja i Lambda izrazi
Java 8 uvodi napomenu poznatu kao @FunctionalInterface koja je obično za pogreške na razini kompajlera. Obično se koristi kada sučelje koje koristite krši ugovore o funkcionalnom sučelju.
Funkcionalno sučelje možete pozvati kao sučelje SAM ili sučelje pojedinačne apstraktne metode. Funkcionalno sučelje omogućuje točno jednu 'apstraktnu metodu' kao svog člana.
Slijedi primjer funkcionalnog sučelja:
@FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); }
Možete izostaviti napomenu, @FunctionalInterface i vaše će funkcionalno sučelje i dalje biti važeće. Ovu bilješku koristimo samo za obavještavanje prevoditelja da će sučelje imati jednu apstraktnu metodu.
Bilješka: Prema definiciji, zadane metode nisu apstraktne i u funkcionalno sučelje možete dodati koliko god želite zadanih metoda.
Drugo, ako sučelje ima apstraktnu metodu koja nadjačava jednu od javnih metoda 'java.lang.object', tada se ne smatra apstraktnom metodom sučelja.
Dolje je dat valjani primjer funkcionalnog sučelja.
@FunctionalInterface public interface FunctionalInterface_one { public void firstInt_method(); @Override public String toString(); //Overridden from Object class @Override public boolean equals(Object obj); //Overridden from Object class }
Lambda izraz (ili funkcija) može se definirati kao anonimna funkcija (funkcija bez imena i identifikatora). Lambda izrazi definirani su točno na mjestu gdje su potrebni, obično kao parametar neke druge funkcije.
Iz druge perspektive, Lambda izrazi izražavaju slučajeve Funkcionalna sučelja (opisano iznad). Lambda izrazi implementiraju jedinu apstraktnu funkciju prisutnu u funkcionalnom sučelju i tako implementiraju funkcionalna sučelja.
Osnovna sintaksa Lambda izraza je:
Osnovni primjer Lambda izraza je:
koji je najbolji besplatni video pretvarač
Gornji izraz uzima dva parametra x i y i vraća njegov zbroj x + y. Na temelju vrste podataka x i y, metoda se može koristiti više puta na raznim mjestima. Tako će se parametri x i y podudarati s int ili Integer i nizom, a na temelju konteksta, dodati će dvije cijele brojeve (kada su parametri int) ili konkatirati dva niza (kada su parametri niz).
Primijenimo program koji demonstrira Lambda izraze.
interface MyInterface { void abstract_func(int x,int y); default void default_Fun() { System.out.println('This is default method'); } } class Main { public static void main(String args()) { //lambda expression MyInterface fobj = (int x, int y)->System.out.println(x+y); System.out.print('The result = '); fobj.abstract_func(5,5); fobj.default_Fun(); } }
Izlaz:
Gornji program prikazuje upotrebu Lambda Expression za dodavanje parametara i prikazuje njihov zbroj. Tada to koristimo za implementaciju apstraktne metode 'abstract_fun' koju smo deklarirali u definiciji sučelja. Rezultat poziva funkcije 'abstract_fun' zbroj je dviju cijelih brojeva proslijeđenih kao parametri tijekom poziva funkcije.
O Lambda izrazima saznat ćemo kasnije u vodiču.
forEach () metoda u Iterable sučelju
Java 8 je uvela metodu 'forEach' u sučelje java.lang.Iterable koja može prelaziti preko elemenata u zbirci. 'ForEach' je zadana metoda definirana u Iterable sučelju. Koriste ga klase Collection koje proširuju Iterable sučelje na iteraciju elemenata.
Metoda 'forEach' uzima Funkcionalno sučelje kao jedan parametar, tj. Lambda Expression možete proslijediti kao argument.
Primjer metode forEach ().
importjava.util.ArrayList; importjava.util.List; public class Main { public static void main(String() args) { List subList = new ArrayList(); subList.add('Maths'); subList.add('English'); subList.add('French'); subList.add('Sanskrit'); subList.add('Abacus'); System.out.println('------------Subject List--------------'); subList.forEach(sub -> System.out.println(sub)); } }
Izlaz:
Dakle, imamo zbirku predmeta tj. Podlist. Sadržaj potpopisa prikazujemo metodom forEach koja uzima Lambda Expression za ispis svakog elementa.
Neobvezna klasa
Java 8 uvela je neobaveznu klasu u paketu 'java.util'. 'Izborno' je javna završna klasa i koristi se za rješavanje NullPointerException u Java aplikaciji. Koristeći Izborno, možete odrediti zamjenski kôd ili vrijednosti koje će se izvoditi. Korištenjem Izbornog ne morate koristiti previše null provjera da biste izbjegli nullPointerException.
Možete koristiti klasu Neobvezno kako biste izbjegli abnormalni prekid programa i spriječili pad programa. Neobavezna klasa pruža metode koje se koriste za provjeru prisutnosti vrijednosti za određenu varijablu.
Sljedeći program prikazuje upotrebu klase Neobvezno.
import java.util.Optional; public class Main{ public static void main(String() args) { String() str = new String(10); OptionalcheckNull = Optional.ofNullable(str(5)); if (checkNull.isPresent()) { String word = str(5).toLowerCase(); System.out.print(str); } else System.out.println('string is null'); } }
Izlaz:
U ovom programu koristimo svojstvo “ofNullable” klase Neobvezno kako bismo provjerili je li niz null. Ako jest, korisniku se ispisuje odgovarajuća poruka.
Zadane i statičke metode u sučeljima
U Javi 8 u sučelje možete dodati metode koje nisu apstraktne, tj. Možete imati sučelja s implementacijom metode. Ključnu riječ Default i Static možete koristiti za stvaranje sučelja s implementacijom metode. Zadane metode uglavnom omogućuju funkcionalnost Lambda Expression.
Koristeći zadane metode, možete dodati novu funkcionalnost svojim sučeljima u svojim knjižnicama. To će osigurati da je kod napisan za starije verzije kompatibilan s tim sučeljima (binarna kompatibilnost).
Razumijemo zadanu metodu na primjeru:
import java.util.Optional; interface interface_default { default void default_method(){ System.out.println('I am default method of interface'); } } class derived_class implements interface_default{ } class Main{ public static void main(String() args){ derived_class obj1 = new derived_class(); obj1.default_method(); } }
Izlaz:
Imamo sučelje nazvano 'interface_default' s metodom default_method () sa zadanom implementacijom. Dalje, definiramo klasu 'izvedena_klasa' koja implementira sučelje 'default_default'.
Imajte na umu da u ovoj klasi nismo primijenili nikakve metode sučelja. Zatim u glavnoj funkciji kreiramo objekt klase 'deriva_class' i izravno pozivamo 'default_method' sučelja bez potrebe da ga definiramo u klasi.
Ovo je uporaba zadanih i statičkih metoda u sučelju. Međutim, ako klasa želi prilagoditi zadanu metodu, tada možete osigurati vlastitu implementaciju nadjačavanjem metode.
Reference o metodama
Značajka referentne metode koja je uvedena u Javi 8 skraćeni je zapis za Lambda Expressions kako bi se pozvala metoda funkcionalnog sučelja. Dakle, svaki put kada koristite Lambda izraz za upućivanje na metodu, svoj Lambda izraz možete zamijeniti referencom metode.
Primjer reference metode.
import java.util.Optional; interface interface_default { void display(); } class derived_class{ public void classMethod(){ System.out.println('Derived class Method'); } } class Main{ public static void main(String() args){ derived_class obj1 = new derived_class(); interface_default ref = obj1::classMethod; ref.display(); } }
Izlaz:
U ovom programu imamo sučelje 'interface_default' sa apstraktnom metodom 'display ()'. Dalje, postoji klasa 'izvedena_klasa' koja ima javnu metodu 'classMethod' koja ispisuje poruku.
U glavnoj funkciji imamo objekt za klasu, a zatim imamo referencu na sučelje koje upućuje na metodu klase 'classMethod' kroz obj1 (objekt klase). Sada kada se referenca sučelja pozove prikaz apstraktne metode, tada se prikazuje sadržaj classMethod.
Java Stream API za skupne podatkovne operacije na zbirkama
Stream API je još jedna velika promjena uvedena u Javi 8. Stream API koristi se za obradu zbirke objekata i podržava drugačiju vrstu iteracije. Stream je slijed objekata (elemenata) koji vam omogućuje spremanje različitih metoda za postizanje željenih rezultata.
Stream nije struktura podataka i prima svoj unos iz zbirki, nizova ili drugih kanala. Možemo izvoditi razne posredne operacije koristeći Streamove, a terminalne operacije vraćaju rezultat. Detaljnije ćemo razgovarati o stream API-ju u zasebnom Java tutorialu.
Java Date Time API
Java 8 uvodi novi API za datum i vrijeme pod paketom java.time.
Među njima su najvažnije klase:
- Lokalno: Pojednostavljeni API za datum i vrijeme bez složenosti rukovanja vremenskom zonom.
- Zonirano: Specijalizirani API za datum i vrijeme za rješavanje različitih vremenskih zona.
Datumi
Klasa datuma zastarjela je u Javi 8.
Slijede uvedeni novi razredi:
- Predmet LocalDate definira datum. Nema reprezentaciju za vrijeme ili vremensku zonu.
- LocalTime razred definira vrijeme. Nema prikaza za datum ili vremensku zonu.
- Klasa LocalDateTime definira datum i vrijeme. Nema prikaz vremenske zone.
Da biste uključili informacije o vremenskoj zoni s funkcijom datuma, možete koristiti Lambda koji nudi 3 klase, tj. OffsetDate, OffsetTime i OffsetDateTime. Ovdje se pomak vremenske zone predstavlja pomoću druge klase - 'ZoneId'. Ovu ćemo temu detaljno obraditi u kasnijim dijelovima ove Java serije.
JavaScript motor nosoroga
Java 8 predstavila je znatno poboljšani motor za JavaScript, tj. Nashorn koji zamjenjuje postojeći Rhino. Nashorn izravno kompajlira kôd u memoriji, a zatim prosljeđuje bajt kod JVM-u, poboljšavajući tako izvedbu za 10 puta.
Nashorn predstavlja novi alat naredbenog retka - jjs koji izvršava JavaScript kod na konzoli.
koju web stranicu mogu gledati anime
Stvorimo JavaScript datoteku ‘sample.js’ koja sadrži sljedeći kôd.
print (‘Hello, World!!’);
Dajte sljedeću naredbu u konzoli:
C: Java jjs sample.js
Izlaz: Pozdrav svijete!!
Također možemo pokretati JavaScript programe u interaktivnom načinu i također pružiti argumente programima.
Dekodiranje kodiranja Base64
U Javi 8 postoji ugrađeno kodiranje i dekodiranje za Base64 kodiranje. Klasa za Base64 kodiranje je java.util.Base64.
Ova klasa nudi tri Base64 kodiranja i dekodere:
- Osnovni, temeljni: U tome se izlaz preslikava na skup znakova između A-Za-z0-9 + /. Koder na izlaz ne dodaje dodavanje retka i dekoder odbija bilo koji znak osim gore navedenog.
- URL: Ovdje je izlaz URL, a naziv datoteke se preslikava na skup znakova između A-Za-z0-9 + /.
- MIME: U ovoj vrsti kodera, izlaz se preslikava u MIME format.
Poboljšanja API-ja zbirke
Java 8 dodala je sljedeće nove metode u API za prikupljanje:
- forEachRemaining (Potrošačka akcija): Ovo je zadana metoda i namijenjena je Iteratoru. Izvodi 'akciju' za svaki od preostalih elemenata sve dok se svi elementi ne obrade ili 'akcija' izbaci iznimku.
- Zadana metoda za zbirku removeIf (filtar predikata): Time se uklanjaju svi elementi u zbirci koji zadovoljavaju zadani 'filter'.
- Spliterator (): Ovo je metoda prikupljanja i vraća instancu spliteratora koju možete koristiti za kretanje elementima bilo u slijedu ili u paraleli.
- Zbirka mapa ima metode replaceAll (), compute () i merge ().
- Klasa HashMap s sudarima ključeva poboljšana je kako bi poboljšala performanse.
Izmjene / poboljšanja API-ja istodobnosti
Slijede važna poboljšanja u istodobnom API-ju:
- ConcurrentHashMap poboljšava se sljedećim metodama:
- izračunati (),
- za svakoga (),
- forEachEntry (),
- forEachKey (),
- forEachValue (),
- go (),
- smanjiti () i
- traži ()
- Metoda 'newWorkStealingPool ()' za izvršitelje stvara spremanje niti krađe rada. Dostupne procesore koristi kao ciljnu razinu paralelizma.
- Metoda 'completableFuture' je ona koju možemo izričito dovršiti (postavljanjem njezine vrijednosti i statusa).
Poboljšanja Java IO-a
IO poboljšanja izvršena u Javi 8 uključuju:
- Files.list (dir putanje): To vraća jlazily naseljen tok, čiji je svaki element unos u direktorij.
- Files.lines (Staza puta): Čita sve retke iz streama.
- Files.find (): Potražite datoteke u stablu datoteka ukorijenjene na zadanoj početnoj datoteci i vraća tok napučen stazom.
- BufferedReader.lines (): Vraća tok sa svim njegovim elementima dok se retci čitaju iz BufferedReader-a.
Razna osnovna poboljšanja API-ja
Imamo sljedeća poboljšanja API-ja:
- Statička metoda withInitial (dobavljač dobavljača) usluge ThreadLocal za jednostavno stvaranje instance.
- Sučelje 'Usporednik' prošireno je zadanim i statičkim metodama za prirodni redoslijed obrnutog redoslijeda itd.
- Klase cjelovitih, dugih i dvostrukih omotača imaju metode min (), max () i sum ().
- Logička klasa poboljšana je metodama logicAnd (), logicOr () i logicXor ().
- U klasi Math predstavljeno je nekoliko korisnih metoda.
- Uklonjen je most JDBC-ODBC.
- Uklonjen je prostor memorije PermGen.
Zaključak
U ovom uputstvu raspravljali smo o glavnim značajkama koje su dodane izdanju Java 8. Budući da je Java 8 glavno izdanje s Jave, važno je da znate sve značajke i poboljšanja izvršena u sklopu ovog izdanja.
Iako je najnovija inačica Java 13, ipak je dobro upoznati se sa značajkama Java 8. Sve značajke o kojima se raspravlja u ovom vodiču i dalje su prisutne u najnovijoj verziji Jave, a mi ćemo ih razmotriti kao pojedinačne teme kasnije u ovoj seriji.
Nadamo se da vam je ovaj vodič pomogao da naučite o raznim značajkama Java 8 !!
Preporučena literatura
- Vodič za dužinu Java polja s primjerima koda
- Java 'this' ključna riječ: Vodič sa primjerima koda
- Java sučelje i udžbenik klase sažetak sa primjerima
- JAVA Tutorial za početnike: 100+ praktičnih Java Video tutorijala
- Implementacija Jave: Izrada i izvršavanje Java JAR datoteke
- C ++ Vs Java: Top 30 razlika između C ++ i Jave s primjerima
- MongoDB metoda sortiranja () s primjerima
- Istražite osnove Jave u selenu sa primjerima