prominent java 8 features with code examples
Komplexný zoznam a vysvetlenie všetkých významných funkcií predstavených vo vydaní Java 8 s príkladmi:
Vydanie Java 8 od spoločnosti Oracle bolo revolučným vydaním vývojovej platformy číslo 1 na svete. Zahŕňalo to obrovský upgrade programovacieho modelu Java ako celku spolu s vývojom JVM, jazyka Java a knižníc koordinovaným spôsobom.
Toto vydanie obsahovalo niekoľko funkcií pre ľahké použitie, produktivitu, vylepšené programovanie Polyglot, zabezpečenie a celkovo vylepšený výkon.
Čo sa dozviete:
- Funkcie pridané k vydaniu Java 8
- Funkčné rozhrania a výrazy lambda
- Metóda forEach () v Iterovateľnom rozhraní
- Voliteľná trieda
- Predvolené a statické metódy v rozhraniach
- Odkazy na metódu
- Rozhranie Java Stream API pre hromadné dátové operácie v zbierkach
- Java Date Time API
- JavaScriptový stroj Rhinoceros
- Dekódovanie Base64
- Vylepšenia Collection API
- Zmeny / vylepšenia súbežného API
- Vylepšenia Java IO
- Rôzne vylepšenia základného API
- Záver
Funkcie pridané k vydaniu Java 8
Medzi hlavné zmeny patria pozoruhodné funkcie, ktoré boli pridané do tohto vydania.
- Funkčné rozhrania a výrazy lambda
- metóda forEach () v Iterovateľnom rozhraní
- Voliteľná trieda,
- predvolené a statické metódy v rozhraniach
- Odkazy na metódy
- Rozhranie Java Stream API pre hromadné dátové operácie v zbierkach
- Java Date Time API
- Vylepšenia rozhrania Collection API
- Vylepšenia súbežného API
- Vylepšenia Java IO
- JavaScriptový stroj Rhinoceros
- Dekódovanie Base64
- Rôzne vylepšenia Core API
V tomto výučbe sa budeme stručne venovať každej z týchto funkcií a pokúsime sa každú z nich vysvetliť pomocou jednoduchých a ľahkých príkladov.
Funkčné rozhrania a výrazy lambda
Java 8 zavádza anotáciu známu ako @FunctionalInterface, ktorá je zvyčajne určená na chyby na úrovni kompilátora. Spravidla sa používa, keď rozhranie, ktoré používate, porušuje zmluvy o funkčnom rozhraní.
Alternatívne môžete funkčné rozhranie nazvať ako rozhranie SAM alebo rozhranie Single Abstract Method. Funkčné rozhranie umožňuje ako člen len jednu „abstraktnú metódu“.
Ďalej je uvedený príklad funkčného rozhrania:
@FunctionalInterface public interface MyFirstFunctionalInterface { public void firstWork(); }
Môžete vynechať anotáciu, @FunctionalInterface a vaše funkčné rozhranie bude stále platné. Túto anotáciu používame iba na informovanie kompilátora, že rozhranie bude mať jednu abstraktnú metódu.
Poznámka: Podľa definície sú predvolené metódy nie abstraktné a do funkčného rozhrania môžete pridať toľko predvolených metód, koľko chcete.
Po druhé, ak má rozhranie abstraktnú metódu, ktorá má prednosť pred jednou z verejných metód „java.lang.object“, potom sa to nepovažuje za abstraktnú metódu rozhrania.
Ďalej je uvedený platný príklad funkčného rozhrania.
@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 }
Výraz Lambda (alebo funkciu) je možné definovať ako anonymnú funkciu (funkcia bez názvu a identifikátora). Výrazy lambda sú definované presne na mieste, kde sú potrebné, zvyčajne ako parameter niektorej inej funkcie.
Z iného pohľadu vyjadruje výraz Lambda výrazy inštancie Funkčné rozhrania (popísané vyššie). Výrazy Lambda implementujú jedinú abstraktnú funkciu prítomnú vo funkčnom rozhraní, a tým implementujú funkčné rozhrania.
Základná syntax výrazu Lambda je:
Základným príkladom výrazu Lambda je:
Vyššie uvedený výraz má dva parametre xay a vráti jeho súčet x + y. Na základe dátového typu x a y možno metódu použiť viackrát na rôznych miestach. Parametre x a y sa teda budú zhodovať s argumentom int alebo Integer a string a na základe kontextu pridá dve celé čísla (ak sú parametre int) alebo spojí dva reťazce (keď sú parametre reťazec).
Poďme implementovať program, ktorý demonštruje výrazy Lambda.
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(); } }
Výkon:
Vyššie uvedený program ukazuje použitie Lambda výrazu na doplnenie parametrov a zobrazuje ich súčet. Potom to použijeme na implementáciu abstraktnej metódy „abstract_fun“, ktorú sme deklarovali v definícii rozhrania. Výsledok volania funkcie „abstract_fun“ je súčet dvoch celých čísel odovzdaných ako parametre pri volaní funkcie.
Neskôr sa v tutoriáli dozvieme viac o výrazoch Lambda.
Metóda forEach () v Iterovateľnom rozhraní
Java 8 zaviedla metódu „forEach“ v rozhraní java.lang.Iterable, ktorá môže iterovať cez prvky v kolekcii. „ForEach“ je predvolená metóda definovaná v rozhraní Iterable. Používajú ho triedy Collection, ktoré rozširujú rozhranie Iterable o iteráciu prvkov.
Metóda „forEach“ berie funkčné rozhranie ako jeden parameter, t. J. Výraz Lambda môžete zadať ako argument.
Ukážka metódy 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)); } }
Výkon:
Takže máme zbierku predmetov, t.j. subList. Obsah subList zobrazujeme pomocou metódy forEach, ktorá na vytlačenie každého prvku vyžaduje výraz Lambda.
Voliteľná trieda
Java 8 predstavila voliteľnú triedu v balíku „java.util“. „Voliteľné“ je verejná záverečná trieda a používa sa na riešenie výnimky NullPointerException v aplikácii Java. Pomocou voliteľného môžete určiť alternatívny kód alebo hodnoty, ktoré sa majú spustiť. Ak použijete voliteľné, nemusíte používať príliš veľa kontrol nuly, aby ste sa vyhli výnimkám nullPointerException.
Triedu Optional môžete použiť, aby ste sa vyhli neobvyklému ukončeniu programu a zabráneniu jeho zrúteniu. Trieda Optional poskytuje metódy, ktoré sa používajú na kontrolu prítomnosti hodnoty pre konkrétnu premennú.
Nasledujúci program demonštruje použitie voliteľnej triedy.
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'); } }
Výkon:
V tomto programe používame vlastnosť „ofNullable“ triedy Optional na kontrolu, či je reťazec nulový. Ak je, užívateľovi sa vytlačí príslušná správa.
Predvolené a statické metódy v rozhraniach
V prostredí Java 8 môžete do rozhrania pridať metódy, ktoré nie sú abstraktné, t. J. Môžete mať rozhrania s implementáciou metódy. Kľúčové slovo Predvolený a Statický môžete použiť na vytvorenie rozhraní s implementáciou metódy. Predvolené metódy umožňujú hlavne funkčnosť výrazu Lambda.
Pomocou predvolených metód môžete do rozhraní v knižniciach pridať nové funkcie. To zabezpečí, že kód napísaný pre staršie verzie je kompatibilný s týmito rozhraniami (binárna kompatibilita).
Poďme si predstaviť predvolenú metódu na príklade:
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(); } }
Výkon:
Máme rozhranie s názvom „interface_default“ s metódou default_method () s predvolenou implementáciou. Ďalej definujeme triedu „odvodená_trieda“, ktorá implementuje rozhranie „interface_default“.
Upozorňujeme, že v tejto triede sme neimplementovali žiadne metódy rozhrania. Potom v hlavnej funkcii vytvoríme objekt triedy „derived_class“ a priamo zavoláme „default_method“ rozhrania bez toho, aby sme ho museli definovať v triede.
Toto je použitie predvolených a statických metód v rozhraní. Ak však chce trieda prispôsobiť predvolenú metódu, môžete jej vlastnú implementáciu prepísať prepísaním.
Odkazy na metódu
Funkcia Referenčná metóda zavedená v prostredí Java 8 je skratkovým zápisom pre výrazy Lambda Express, ktoré nazývajú metódu funkčného rozhrania. Takže zakaždým, keď použijete výraz Lambda na odporúčanie metódy, môžete svoj výraz Lambda nahradiť odkazom na metódu.
Príklad referencie metódy.
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(); } }
Výkon:
V tomto programe máme rozhranie „interface_default“ s abstraktnou metódou „display ()“. Ďalej existuje trieda „derived_class“, ktorá má verejnú metódu „classMethod“, ktorá vytlačí správu.
programy, ktoré používajú c ++
V hlavnej funkcii máme objekt pre triedu a potom máme odkaz na rozhranie, ktoré odkazuje na metódu triedy „classMethod“ cez obj1 (objekt triedy). Keď sa teraz volá zobrazenie abstraktnej metódy odkazom na rozhranie, potom sa zobrazí obsah classMethod.
Rozhranie Java Stream API pre hromadné dátové operácie v zbierkach
Stream API je ďalšou významnou zmenou zavedenou v prostredí Java 8. Stream API sa používa na spracovanie zbierky objektov a podporuje iný typ iterácie. Stream je postupnosť objektov (prvkov), ktorá vám umožňuje pripraviť rôzne metódy na dosiahnutie požadovaných výsledkov.
Stream nie je dátová štruktúra a svoj vstup prijíma zo zbierok, polí alebo iných kanálov. Pomocou Streamov môžeme naplánovať rôzne medzioperácie a operácie terminálu vrátia výsledok. Stream API sa budeme podrobnejšie venovať v samostatnom tutoriáli Java.
Java Date Time API
Java 8 predstavuje nové rozhranie API dátumu a času v rámci balíka java.time.
Najdôležitejšie triedy z nich sú:
- Miestne: Zjednodušené rozhranie dátumu a času bez zložitosti spracovania časovej zóny.
- Pásmový: Špecializované rozhranie Date-Time API na prácu s rôznymi časovými pásmami.
Termíny
Trieda dátumu sa v Jave 8 stala zastaranou.
Nasledujú nové triedy, ktoré sú zavedené:
- Trieda LocalDate definuje dátum. Nemá žiadne zastúpenie pre čas alebo časové pásmo.
- LocalTime trieda definuje čas. Nemá zastúpenie pre dátum ani časové pásmo.
- Trieda LocalDateTime definuje dátum a čas. Nemá zastúpenie v časovom pásme.
Ak chcete zahrnúť informácie o časovom pásme s funkciou dátumu, môžete použiť Lambda, ktorá poskytuje 3 triedy, tj. OffsetDate, OffsetTime a OffsetDateTime. Tu je posun časového pásma znázornený pomocou inej triedy - „ZoneId“. Tejto téme sa budeme podrobne venovať v ďalších častiach tejto série Java.
JavaScriptový stroj Rhinoceros
Java 8 predstavila oveľa vylepšený engine pre JavaScript, t.j. Nashorn, ktorý nahrádza existujúci Rhino. Nashorn priamo kompiluje kód do pamäte a potom odovzdá bytecode do JVM, čím zlepší výkon až 10-krát.
Nashorn predstavuje nový nástroj príkazového riadku - jjs, ktorý na konzole spúšťa kód JavaScript.
Vytvorme súbor JavaScript „sample.js“, ktorý obsahuje nasledujúci kód.
print (‘Hello, World!!’);
V konzole zadajte nasledujúci príkaz:
C: Java jjs sample.js
Výkon: Ahoj, svet !!
Môžeme tiež spúšťať programy JavaScriptu v interaktívnom režime a tiež programom poskytovať argumenty.
Dekódovanie Base64
V prostredí Java 8 je zabudované kódovanie a dekódovanie pre kódovanie Base64. Triedou kódovania Base64 je java.util.Base64.
Táto trieda poskytuje tri kódovania a dekodéry Base64:
- Základné: V tomto je výstup mapovaný na množinu znakov medzi A-Za-z0-9 + /. Kodér nepridáva na výstup žiadny riadok a dekodér odmieta akýkoľvek iný znak ako vyššie uvedený.
- URL: Tu je výstupom adresa URL a názov súboru bezpečný je mapovaný na množinu znakov medzi A-Za-z0-9 + /.
- MIME: V tomto type kódovacieho zariadenia je výstup mapovaný do formátu vhodného pre MIME.
Vylepšenia Collection API
Java 8 pridala do API Collection nasledujúce nové metódy:
- forEachRemaining (akcia spotrebiteľa): Toto je predvolená metóda a je určená pre Iterator. Vykonáva „akciu“ pre každý zo zvyšných prvkov, kým nie sú spracované všetky prvky, alebo kým „akcia“ nevyvolá výnimku.
- Predvolená metóda pre kolekciu removeIf (filter predikátov): Týmto sa odstránia všetky prvky v kolekcii, ktoré vyhovujú danému „filtru“.
- Spliterator (): Toto je metóda zhromažďovania a vracia inštanciu spliteratora, ktorú môžete použiť na prechádzanie prvkami postupným alebo paralelným spôsobom.
- Zbierka máp má metódy replaceAll (), compute () a merge ().
- Trieda HashMap s kolíziami kľúčov bola vylepšená, aby sa zlepšil výkon.
Zmeny / vylepšenia súbežného API
Nasledujú dôležité vylepšenia v súbežnom rozhraní API:
- ConcurrentHashMap je vylepšený o nasledujúce metódy:
- vypočítať (),
- pre každý (),
- forEachEntry (),
- forEachKey (),
- forEachValue (),
- ísť (),
- znížiť () a
- Vyhľadávanie ()
- Metóda „newWorkStealingPool ()“ pre exekútorov vytvára fond vlákien odcudzenia práce. Ako cieľovú úroveň paralelizmu používa dostupné procesory.
- Metóda „completableFuture“ je metóda, ktorú môžeme explicitne dokončiť (nastavením jej hodnoty a stavu).
Vylepšenia Java IO
Vylepšenia IO vykonané v prostredí Java 8 zahŕňajú:
- Files.list (cesta dir): Týmto sa vráti jasno osídlený prúd, ktorého každý prvok je záznam v adresári.
- Files.lines (cesta cesty): Číta všetky riadky zo streamu.
- Files.find (): Vyhľadá súbory v strome súborov, ktorý má korene v danom počiatočnom súbore, a vráti prúd naplnený cestou.
- BufferedReader.lines (): Vráti prúd s každým jeho prvkom ako riadky načítané z BufferedReader.
Rôzne vylepšenia základného API
Máme nasledujúce vylepšenia rozhrania API:
- Statická metóda withInitial (dodávateľ dodávateľa) z ThreadLocal na jednoduché vytvorenie inštancie.
- Rozhranie „Komparátor“ je rozšírené o predvolené a statické metódy pre prirodzené poradie v opačnom poradí atď.
- Celé, dlhé a dvojité obalové triedy majú metódy min (), max () a sum ().
- Trieda Boolean je vylepšená metódami logickýchAnd (), logickýchOr () a logickýchXor ().
- V triede Math je zavedených niekoľko užitočných metód.
- Most JDBC-ODBC je odstránený.
- Pamäťový priestor PermGen je odstránený.
Záver
V tomto tutoriáli sme diskutovali o hlavných funkciách, ktoré boli pridané do vydania Java 8. Pretože Java 8 je hlavné vydanie z Java, je dôležité, aby ste poznali všetky funkcie a vylepšenia, ktoré boli urobené ako súčasť tohto vydania.
Aj keď má najnovšia verzia Java 13, je dobré sa oboznámiť s funkciami Java 8. Všetky funkcie popísané v tomto tutoriále sú stále prítomné v najnovšej verzii Java a ďalej sa im budeme venovať ako k jednotlivým témam ďalej v tejto sérii.
Dúfame, že vám tento výukový program pomohol dozvedieť sa viac o rôznych funkciách Java 8 !!
Odporúčané čítanie
- Výukový program Java Array Length s príkladmi kódu
- Java „toto“ kľúčové slovo: Výukový program s príkladmi kódu
- Výukový program pre rozhranie Java a abstraktnú triedu s príkladmi
- Výukový program JAVA pre začiatočníkov: viac ako 100 praktických výučbových programov Java Video
- Nasadenie Java: Vytvorenie a vykonanie súboru Java JAR
- C ++ Vs Java: tridsať najdôležitejších rozdielov medzi C ++ a Java s príkladmi
- Metóda MongoDB Sort () s príkladmi
- Preskúmajte základy Java v seléne pomocou príkladov