what is nullpointerexception java how avoid it
Deze tutorial legt alles uit over de NullPointerException in Java. We zullen de oorzaken van de Null Pointer-uitzondering en manieren om deze te vermijden bespreken:
NullPointerException in Java is een runtime-uitzondering. Java wijst een speciale null-waarde toe aan een objectverwijzing. Wanneer een programma een objectreferentie probeert te gebruiken die is ingesteld op de null-waarde, wordt deze uitzondering gegenereerd.
Bekijk hier de eenvoudige Java-trainingsserie.
Wat je leert:
NullPointerException in Java
Als een objectverwijzing met een null-waarde NullPointerException genereert, waarom hebben we dan een null-waarde nodig?
De null-waarde wordt meestal gebruikt om aan te geven dat er geen waarde is toegewezen aan een referentievariabele. Ten tweede hebben we null-waarden nodig voor verzamelingen zoals gekoppelde lijsten en bomen om null-knooppunten aan te geven. De ontwerppatronen zoals singleton-patronen maken gebruik van nulwaarden.
Tot slot heeft de nulwaarde in Java veel toepassingen. Null Pointer Exception wordt gegenereerd in specifieke scenario's in Java.
Enkele van de scenario's zijn als volgt:
- Methode die wordt aangeroepen met een null-object.
- Toegang tot of wijziging van een veld of gegevenslid van het null-object.
- Null-object als argument doorgeven aan een methode.
- De lengte van een null-array berekenen.
- Toegang tot de index van een null-array.
- Een null-object synchroniseren.
- Een null-object gooien.
De Null Pointer Exception strekt zich uit van de klasse RuntimeException.
De hiërarchie van NullPointerException wordt hieronder gegeven.
Zoals weergegeven in de bovenstaande hiërarchie, breidt Null Pointer Exception zich uit van de RuntimeException die de Exception Class erft. De uitzonderingsklasse is op zijn beurt afgeleid van de Throwable-klasse die een subklasse is van Object.
Oorzaken van java.lang.NullPointerException Occurrence
Nu zullen we elk van de scenario's van het optreden van NullPointerException demonstreren die we hierboven hebben vermeld.
# 1) De methode wordt aangeroepen met een null-object
Beschouw het volgende codevoorbeeld. Hier hebben we een klasse, MyClass, die twee methoden biedt. De eerste methode ‘initT’ retourneert een null-object. In de hoofdmethode maken we een object van MyClass met een aanroep van de initT-methode.
Vervolgens noemen we de printmethode MyClass. Hier wordt de java.lang.NullPointerException gegenereerd terwijl we de printmethode aanroepen met een null-object.
Uitvoer
# 2) Toegangsveld van een null-object
Uitvoer
beste programma om de harde schijf te klonen
Dit is een andere oorzaak van NullPointerException. Hier proberen we toegang te krijgen tot een klaslid met behulp van een null-object. We kennen de retourwaarde van de initT-methode toe aan het object t en openen vervolgens numField met object t. Maar het object t is een null-object, aangezien initT een null-object retourneert. Op dit punt wordt java.lang.NullPointerException geactiveerd.
# 3) Een null-object als argument doorgeven
Dit is de meest voorkomende oorzaak van het optreden van java.lang.NullPointerException. Beschouw het volgende Java-programma. Hier hebben we een methode ‘print_LowerCase’ die het String-object dat als argument is doorgegeven, omzet in kleine letters.
Uitvoer
In de hoofdmethode noemen we deze methode en geven we een null door als argument. Omdat het String-object niet null kan zijn, wordt de java.lang.NullPointerException gegenereerd.
# 4) De lengte van een null-array verkrijgen
Als u de lengte van een null-array probeert te berekenen, wordt ook java.lang.NullPointerException gegenereerd.
Het onderstaande programma laat dit zien.
Uitvoer
In het bovenstaande programma declareren we een array en wijzen we er null aan toe, d.w.z. geen gegevens. Wanneer we de eigenschap length gebruiken op deze null-array, wordt NullPointerException gegenereerd.
# 5) Toegangsindex van een null-array
Vergelijkbaar met length, zelfs als we proberen toegang te krijgen tot een waarde in een null-array met behulp van een index, is dit de oorzaak van java.lang.NullPointerException.
Uitvoer
In het bovenstaande programma proberen we toegang te krijgen tot de waarde op index 2 van een null-array.
# 6) Synchronisatie op een null-object
We synchroniseren meestal een blok of een methode om gelijktijdige toegang te vergemakkelijken. De objectverwijzing die we gebruiken voor synchronisatie mag echter niet null zijn. Als het een null-object is, resulteert dit in java.lang.NullPointerException.
Het onderstaande Java-programma laat dit zien. Zoals we kunnen zien, hebben we een String-object ‘mutex’ geïnitialiseerd op null. Vervolgens gebruiken we in de hoofdfunctie een gesynchroniseerd blok met mutex als objectreferentie. Omdat mutex null is, wordt java.lang.NullPointerException geactiveerd.
Uitvoer
# 7) Door null te gooien
Uitgang:
In het bovenstaande voorbeeldprogramma wordt null gegooid in plaats van een geldig object te gooien. Dit resulteert in een Null Pointer Exception.
Null-pointeruitzondering vermijden
Nu we de oorzaken van het optreden van NullPointerException hebben gezien, moeten we het ook proberen te vermijden in ons programma.
Ten eerste moeten we ervoor zorgen dat de objecten die we in onze programma's gebruiken correct worden geïnitialiseerd, zodat we het gebruik van null-objecten kunnen vermijden die resulteren in een Null Pointer Exception. We moeten er ook voor zorgen dat de referentievariabelen die in het programma worden gebruikt, naar geldige waarden verwijzen en niet per ongeluk null-waarden verkrijgen.
Afgezien van deze overwegingen, kunnen we ook van geval tot geval meer voorzichtigheid betrachten om java.lang.NullPointerException te vermijden.
Hieronder bekijken we enkele gevallen.
# 1) Stringvergelijking met letterlijke waarden
Een vergelijking tussen de stringvariabele en een letterlijke (werkelijke waarde of element van de enum) is een veel voorkomende bewerking in Java-programma's. Maar als de String-variabele die een object is, null is, zal het vergelijken van dit null-object met literals NullPointerException genereren.
De oplossing is dus om de vergelijkingsmethode aan te roepen vanuit het letterlijke in plaats van het String-object dat null kan zijn.
Het volgende programma laat zien hoe we vergelijkingsmethoden kunnen aanroepen vanuit literals en java.lang.NullPointerException kunnen vermijden.
Uitvoer
# 2) Controleer de argumenten van een methode
Controleer de argumenten van de methode om er zeker van te zijn dat het geen null-waarden zijn. Als de argumenten niet overeenkomen met de specificatie, zal de code IllegalArgumentException genereren om aan te geven dat de argumenten niet zijn zoals verwacht.
Dit wordt getoond in het onderstaande Java-programma.
Uitvoer
# 3) Gebruik van Ternary Operator om voor nulwaarden te zorgen
We kunnen de ternaire operator gebruiken om java.lang.NullPointerException te vermijden. De ternaire operator heeft drie operators. De eerste is een booleaanse uitdrukking die resulteert in true of false. Als de uitdrukking waar is, wordt de tweede operator geretourneerd of wordt de derde operator geretourneerd.
Het volgende programma toont het gebruik van een ternaire operator om NullPointerException te vermijden.
Uitvoer
Veel Gestelde Vragen
V # 1) Hoe repareer ik NullPointerException in Java?
Antwoord: We moeten ervoor zorgen dat alle objecten die in het programma worden gebruikt, correct worden geïnitialiseerd en dat ze geen null-waarden hebben. Ook mogen de referentievariabelen geen null-waarden hebben.
# 2) Is NullPointerException aangevinkt of niet aangevinkt?
Antwoord: NullPointerException is geen gecontroleerde uitzondering. Het is een afstammeling van RuntimeException en is niet aangevinkt.
# 3) Hoe stop ik NullPointerException?
Antwoord: Enkele van de best practices om NullPointerException te vermijden zijn:
- Gebruik de methode equals () en equalsIgnoreCase () met String literal in plaats van deze te gebruiken voor het onbekende object dat null kan zijn.
- Gebruik valueOf () in plaats van toString (); en beide retourneren hetzelfde resultaat.
- Gebruik Java-annotatie @NotNull en @Nullable.
# 4) Wat is de nulwaarde in Java?
Antwoord: Een null-waarde verwijst niet naar een object of variabele. Het is een trefwoord en een letterlijke. Het vertegenwoordigt een nulreferentie.
# 5) Kunnen we NullPointerException vangen in Java?
Antwoord: De uitzondering java.lang.NullPointerException is een ongecontroleerde uitzondering en is een uitbreiding van de RuntimeException-klasse. Daarom is er geen dwang voor de programmeur om het te vangen.
Gevolgtrekking
In deze tutorial hebben we de NullPointerException in Java besproken. Dit is een vrij gevaarlijke uitzondering en kan meestal verschijnen wanneer we dit het minst verwachten. Null Pointer Uitzondering treedt meestal op vanwege het null-object of de null-verwijzing. We hebben de oorzaken en manieren al gezien om NullPointerException te vermijden.
De programmeur moet zoveel mogelijk proberen het optreden van een Null Pointer Exception in een programma te vermijden. Aangezien dit een ongecontroleerde runtime-uitzondering is, zouden we moeten zien dat deze niet optreedt wanneer de applicatie wordt uitgevoerd.
Bezoek hier om Java vanaf het begin te leren.
Aanbevolen literatuur
- Java-uitzonderingen en het afhandelen van uitzonderingen met voorbeelden
- Hoe om te gaan met de ArrayIndexOutOfBoundsException in Java?
- C # Tutorial voor het afhandelen van uitzonderingen met codevoorbeelden
- Volledige gids voor het omgaan met PL SQL-uitzonderingen met voorbeelden
- Hoe om te gaan met uitzonderingen in SoapUI Groovy Scripts - SoapUI Tutorial # 11
- Python Try Behalve - Python Handling Exception met voorbeelden
- Afhandeling van JDBC-uitzonderingen - Hoe om te gaan met SQL-uitzonderingen
- Afhandeling van uitzonderingen in C ++