prominent java 8 features with code examples
Een uitgebreide lijst en uitleg van alle prominente functies die zijn geïntroduceerd in de Java 8-release met voorbeelden:
De Java 8-release van Oracle was een revolutionaire release van 's werelds # 1 ontwikkelingsplatform. Het omvatte een enorme upgrade van het Java-programmeermodel als geheel, samen met de evolutie van de JVM, Java-taal en bibliotheken op een gecoördineerde manier.
Deze release bevatte verschillende functies voor gebruiksgemak, productiviteit, verbeterde polyglot-programmering, beveiliging en algehele verbeterde prestaties.
Wat je leert:
- Functies toegevoegd aan Java 8-release
- Functionele interfaces en Lambda-expressies
- forEach () - methode in herhaalbare interface
- Facultatieve klasse
- Standaard en statische methoden in interfaces
- Methodeverwijzingen
- Java Stream API voor bulkgegevensbewerkingen op verzamelingen
- Java Date Time API
- Rhinoceros JavaScript-engine
- Base64 coderen decoderen
- Collectie API-verbeteringen
- Gelijktijdigheid API-wijzigingen / verbeteringen
- Java IO-verbeteringen
- Diverse Core API-verbeteringen
- Gevolgtrekking
Functies toegevoegd aan Java 8-release
Onder de belangrijkste wijzigingen zijn de volgende de opmerkelijke functies die aan deze release zijn toegevoegd.
- Functionele interfaces en Lambda Expressions
- forEach () methode in herhaalbare interface
- Facultatieve klasse,
- standaard en statische methoden in Interfaces
- Methode verwijzingen
- Java Stream API voor bulkgegevensbewerkingen op verzamelingen
- Java Date Time API
- Collectie API-verbeteringen
- Concurrency API-verbeteringen
- Java IO-verbeteringen
- Rhinoceros JavaScript-engine
- Base64 coderen decoderen
- Diverse Core API-verbeteringen
In deze tutorial zullen we elk van deze functies kort bespreken en proberen ze elk uit te leggen met behulp van eenvoudige en gemakkelijke voorbeelden.
Functionele interfaces en Lambda-expressies
Java 8 introduceert een annotatie die bekend staat als @FunctionalInterface en die meestal bedoeld is voor fouten op compilerniveau. Het wordt meestal gebruikt wanneer de interface die u gebruikt in strijd is met de contracten van de functionele interface.
Als alternatief kunt u een functionele interface aanroepen als SAM-interface of Single Abstract Method-interface. Een functionele interface laat precies één 'abstracte methode' toe als lid.
Hieronder wordt een voorbeeld gegeven van een functionele interface:
U kunt de annotatie, @FunctionalInterface weglaten en uw functionele interface zal nog steeds geldig zijn. We gebruiken deze annotatie alleen om de compiler te informeren dat de interface een enkele abstracte methode zal hebben.
Notitie: Standaardmethoden zijn per definitie niet-abstract en u kunt zoveel standaardmethoden in de functionele interface toevoegen als u wilt.
Ten tweede, als een interface een abstracte methode heeft die een van de openbare methoden van 'java.lang.object' overschrijft, wordt deze niet beschouwd als de abstracte methode van de interface.
Hieronder wordt een geldig voorbeeld van een functionele interface gegeven.
Een Lambda-expressie (of functie) kan worden gedefinieerd als een anonieme functie (een functie zonder naam en een identifier). Lambda-expressies worden precies op de plaats gedefinieerd waar ze nodig zijn, meestal als parameter voor een andere functie.
Vanuit een ander perspectief drukken Lambda Expressions voorbeelden uit van Functionele interfaces (hierboven omschreven). Lambda Expressions implementeren de enige abstracte functie die aanwezig is in de functionele interface en implementeren zo functionele interfaces.
beste plek om gratis anime te kijken
De basissyntaxis van een Lambda-expressie is:
Een eenvoudig voorbeeld van de Lambda-expressie is:
De bovenstaande uitdrukking heeft twee parameters x en y en retourneert de som x + y. Op basis van het datatype x en y kan de methode meerdere keren op verschillende plaatsen worden gebruikt. De parameters x en y komen dus overeen met int of Integer en string, en op basis van de context worden er twee gehele getallen toegevoegd (als de parameters int zijn) of de twee strings samenvoegen (als de parameters een string zijn).
Laten we een programma implementeren dat Lambda Expressions demonstreert.
Uitgang:
Het bovenstaande programma toont het gebruik van Lambda Expression om parameters toe te voegen en geeft hun som weer. Vervolgens gebruiken we dit om de abstracte methode 'abstract_fun' te implementeren die we in de interfacedefinitie hebben gedeclareerd. Het resultaat van het aanroepen van de functie 'abstract_fun' is de som van de twee gehele getallen die als parameters zijn doorgegeven tijdens het aanroepen van de functie.
We zullen later in de tutorial meer leren over Lambda Expressions.
forEach () - methode in herhaalbare interface
Java 8 heeft een 'forEach' -methode geïntroduceerd in de interface java.lang.Iterable die de elementen in de collectie kan herhalen. 'ForEach' is een standaardmethode die is gedefinieerd in de herhaalbare interface. Het wordt gebruikt door de Collectieklassen die de itereerbare interface uitbreiden om elementen te herhalen.
De 'forEach' -methode neemt de functionele interface als een enkele parameter, d.w.z. u kunt Lambda Expression als een argument doorgeven.
Voorbeeld van de methode forEach ().
Uitgang:
We hebben dus een verzameling onderwerpen, d.w.z. subList. We tonen de inhoud van de subList met behulp van de forEach-methode die Lambda Expression nodig heeft om elk element af te drukken.
Facultatieve klasse
Java 8 introduceerde een optionele klasse in het pakket 'java.util'. 'Optioneel' is een openbare laatste klasse en wordt gebruikt om met NullPointerException om te gaan in de Java-applicatie. Met Optioneel kunt u alternatieve code of waarden opgeven die moeten worden uitgevoerd. Door Optioneel te gebruiken, hoeft u niet te veel null-controles te gebruiken om nullPointerException te vermijden.
U kunt de klasse Optional gebruiken om abnormale beëindiging van het programma te voorkomen en te voorkomen dat het programma crasht. De klasse Optioneel biedt methoden die worden gebruikt om de aanwezigheid van waarde voor een bepaalde variabele te controleren.
Het volgende programma demonstreert het gebruik van de optionele klasse.
Uitgang:
In dit programma gebruiken we de eigenschap 'ofNullable' van de klasse Optional om te controleren of de tekenreeks null is. Als dit het geval is, wordt het juiste bericht voor de gebruiker afgedrukt.
Standaard en statische methoden in interfaces
In Java 8 kunt u methoden in de interface toevoegen die niet abstract zijn, d.w.z. u kunt interfaces hebben met de implementatie van methoden. U kunt het trefwoord Default en Static gebruiken om interfaces te maken met de implementatie van methoden. Standaardmethoden maken voornamelijk Lambda Expression-functionaliteit mogelijk.
Met behulp van standaardmethoden kunt u nieuwe functionaliteit toevoegen aan uw interfaces in uw bibliotheken. Dit zorgt ervoor dat de code die is geschreven voor de oudere versies compatibel is met die interfaces (binaire compatibiliteit).
Laten we de standaardmethode eens nader bekijken met een voorbeeld:
stack-implementatie in c ++ met behulp van array
Uitgang:
We hebben een interface genaamd 'interface_default' met de methode default_method () met een standaard implementatie. Vervolgens definiëren we een klasse “afgeleide_klasse” die de interface “interface_default” implementeert.
Merk op dat we geen interfacemethoden hebben geïmplementeerd in deze klasse. Vervolgens maken we in de hoofdfunctie een object van de klasse 'afgeleide_klasse' en roepen we rechtstreeks de 'standaardmethode' van de interface aan zonder deze in de klasse te hoeven definiëren.
Dit is het gebruik van standaard en statische methoden in de interface. Als een klasse echter de standaardmethode wil aanpassen, kunt u voor zijn eigen implementatie zorgen door de methode te overschrijven.
Methodeverwijzingen
De Method reference feature geïntroduceerd in Java 8 is een verkorte notatie voor Lambda Expressions om een methode van Functional Interface aan te roepen. Dus elke keer dat u een Lambda Expression gebruikt om een methode te verwijzen, kunt u uw Lambda Expression vervangen door method reference.
Voorbeeld van methodeverwijzing.
Uitgang:
In dit programma hebben we een interface 'interface_default' met een abstracte methode 'display ()'. Vervolgens is er een klasse 'afgeleid_klasse' die een openbare methode 'classMethod' heeft die een bericht afdrukt.
In de hoofdfunctie hebben we een object voor de klasse, en dan hebben we een verwijzing naar de interface die verwijst naar een klassemethode 'classMethod' via obj1 (class-object). Wanneer nu de weergave van de abstracte methode wordt aangeroepen door interfacereferentie, wordt de inhoud van classMethod weergegeven.
Java Stream API voor bulkgegevensbewerkingen op verzamelingen
De Stream API is nog een andere belangrijke verandering die in Java 8 is geïntroduceerd. Stream API wordt gebruikt voor het verwerken van de verzameling objecten en ondersteunt een ander type iteratie. Een stream is een reeks objecten (elementen) waarmee u verschillende methoden kunt pijplijnen om de gewenste resultaten te produceren.
Een stream is geen datastructuur en ontvangt zijn input van verzamelingen, arrays of andere kanalen. We kunnen verschillende tussenliggende bewerkingen pijplijnen met behulp van Streams en de terminalbewerkingen retourneren het resultaat. We zullen stream API in meer detail bespreken in een aparte Java-tutorial.
Java Date Time API
Java 8 introduceert een nieuwe date-time API onder het pakket java.time.
De belangrijkste klassen zijn:
- Lokaal: Vereenvoudigde datum-tijd-API zonder complexiteit van tijdzoneafhandeling.
- Gezoneerd: Gespecialiseerde datum-tijd-API om met verschillende tijdzones om te gaan.
Datums
hoe een wachtrij in java te initialiseren
Datumklasse is verouderd in Java 8.
Hieronder volgen de nieuwe klassen die zijn geïntroduceerd:
- De klasse LocalDate definieert een datum. Het heeft geen weergave voor tijd of tijdzone.
- De LocalTime klasse definieert een tijd. Het heeft geen weergave voor datum of tijdzone.
- De klasse LocalDateTime definieert een datum-tijd. Het heeft geen weergave van een tijdzone.
Om tijdzone-informatie met datumfunctionaliteit op te nemen, kunt u Lambda gebruiken die 3 klassen biedt, namelijk OffsetDate, OffsetTime en OffsetDateTime. Hier wordt de tijdzoneverschuiving weergegeven met een andere klasse - 'ZoneId'. We zullen dit onderwerp in detail behandelen in de latere delen van deze Java-serie.
Rhinoceros JavaScript-engine
Java 8 introduceerde een sterk verbeterde engine voor JavaScript, d.w.z. Nashorn, die de bestaande Rhino vervangt. Nashorn compileert de code direct in het geheugen en geeft de bytecode vervolgens door aan JVM, waardoor de prestaties 10 keer worden verbeterd.
Nashorn introduceert een nieuw opdrachtregelprogramma - jjs dat JavaScript-code op de console uitvoert.
Laten we een JavaScript-bestand ‘sample.js’ maken dat de volgende code bevat.
Geef het volgende commando in de console:
C: Java jjs sample.js
Uitgang: Hallo Wereld!!
We kunnen ook JavaScript-programma's in interactieve modus uitvoeren en ook argumenten aan de programma's geven.
Base64 coderen decoderen
In Java 8 is er een ingebouwde codering en decodering voor Base64-codering. De klasse voor Base64-codering is java.util.Base64.
Deze klasse biedt drie Base64-coderingen en decoders:
- Basis: Hierin wordt de uitvoer toegewezen aan een reeks tekens tussen A-Za-z0-9 + /. Er wordt door de encoder geen line feed aan de output toegevoegd en de decoder weigert elk ander teken dan het bovenstaande.
- URL: Hier is de uitvoer de URL en wordt de bestandsnaamkluis toegewezen aan de set tekens tussen A-Za-z0-9 + /.
- MIME: In dit type encoder wordt de uitvoer toegewezen aan een MIME-vriendelijk formaat.
Collectie API-verbeteringen
Java 8 heeft de volgende nieuwe methoden toegevoegd aan de Collection API:
- forEachRemaining (Consumentenactie): dit is een standaardmethode en is voor de iterator. Het voert de 'actie' uit voor elk van de resterende elementen totdat alle elementen zijn verwerkt of 'actie' genereert een uitzondering.
- De standaard methode voor collectie removeIf (Predikaat filter): Dit verwijdert alle elementen in de collectie die voldoen aan het gegeven “filter”.
- Spliterator (): Dit is een verzamelingsmethode en retourneert een spliteratorinstantie die u kunt gebruiken om de elementen sequentieel of parallel te doorlopen.
- De kaartverzameling heeft replaceAll (), compute () en merge () -methoden.
- De klasse HashMap met sleutelbotsingen is verbeterd om de prestaties te verbeteren.
Gelijktijdigheid API-wijzigingen / verbeteringen
Hieronder volgen de belangrijke verbeteringen in Concurrent API:
- ConcurrentHashMap is verbeterd met de volgende methoden:
- berekenen (),
- voor elke (),
- forEachEntry (),
- forEachKey (),
- forEachValue (),
- Gaan (),
- verminderen () en
- zoeken ()
- De methode “newWorkStealingPool ()” voor uitvoerders creëert een threadpool die werk steelt. Het gebruikt de beschikbare processors als het beoogde parallellisme.
- Methode 'completableFuture' is degene die we expliciet kunnen voltooien (door de waarde en status in te stellen).
Java IO-verbeteringen
IO-verbeteringen gedaan in Java 8 zijn onder meer:
- Files.list (padmap): Dit retourneert een vrolijk bevolkte stream, waarvan elk element het item in de directory is.
- Files.lines (padpad): Leest alle regels uit een stream.
- Files.find (): Zoek naar bestanden in de bestandsstructuur die zijn geworteld in een bepaald startbestand en retourneert een stroom die wordt gevuld door een pad.
- BufferedReader.lines (): Retourneert een stream met elk element als de regels die worden gelezen uit BufferedReader.
Diverse Core API-verbeteringen
We hebben de volgende diverse API-verbeteringen:
- Statische methode met Initial (leverancier leverancier) van ThreadLocal om eenvoudig een instantie te maken.
- De interface 'Comparator' is uitgebreid met de standaard en statische methoden voor natuurlijke volgorde in omgekeerde volgorde enz.
- De wrapper-klassen integer, lang en dubbel hebben de methoden min (), max () en sum ().
- De Booleaanse klasse is uitgebreid met de methoden logicalAnd (), logicalOr () en logicalXor ().
- In de klasse Math worden verschillende hulpprogramma's geïntroduceerd.
- JDBC-ODBC Bridge is verwijderd.
- De geheugenruimte van PermGen is verwijderd.
Gevolgtrekking
In deze tutorial hebben we de belangrijkste functies besproken die zijn toegevoegd aan de Java 8-release. Aangezien Java 8 een belangrijke release van Java is, is het belangrijk dat u alle functies en verbeteringen kent die zijn aangebracht als onderdeel van deze release.
Hoewel de nieuwste Java-versie 13 is, is het toch een goed idee om vertrouwd te raken met de Java 8-functies. Alle functies die in deze tutorial worden besproken, zijn nog steeds aanwezig in de nieuwste versie van Java en we zullen ze later in deze serie als afzonderlijke onderwerpen bespreken.
We hopen dat deze tutorial je heeft geholpen meer te leren over verschillende Java 8-functies !!
Aanbevolen literatuur
- Zelfstudie over Java-array-lengte met codevoorbeelden
- Java 'dit' trefwoord: zelfstudie met codevoorbeelden
- Java-interface en abstracte les met voorbeelden
- JAVA-zelfstudie voor beginners: 100+ praktische Java-videotutorials
- Java-implementatie: creatie en uitvoering van Java JAR-bestand
- C ++ Vs Java: Top 30 verschillen tussen C ++ en Java met voorbeelden
- MongoDB Sort () -methode met voorbeelden
- Verken de essentie van Java in selenium met voorbeelden