java.lang.NullPointerException is een van de meest populaire uitzonderingen in java programmering. Iedereen die in java werkt, moet dit uit het niets hebben zien opduiken in het standalone java-programma en de java-webtoepassing.
java.lang.NullPointerException
NullPointerException is een runtime-uitzondering, dus we hoeven deze niet in het programma te vangen. NullPointerException wordt in een applicatie opgeworpen wanneer we een bewerking proberen uit te voeren op null waar een object vereist is. Enkele van de meest voorkomende redenen voor NullPointerException in java-programma’s zijn:
- Een methode aanroepen op een objectinstantie, maar tijdens runtime is het object null.
- Variabelen van een objectinstantie die tijdens runtime null zijn, openen.
- Null in het programma gooien
- Index toegang of waarde van een index van een array die null is, wijzigen
- De lengte van een array die tijdens runtime null is, controleren.
Voorbeelden van Java NullPointerException
Laten we eens kijken naar enkele voorbeelden van NullPointerException in Java-programma’s.
1. NullPointerException bij het aanroepen van een instantiemethode
Wanneer we het bovenstaande programma uitvoeren, werpt het de volgende NullPointerException-foutmelding op.
We krijgen een NullPointerException in de verklaring t.foo("Hi");
omdat “t” hier null is.
2. Java NullPointerException bij toegang/wijziging van een veld van een null-object
Het bovenstaande programma werpt de volgende NullPointerException-stacktrace op.
NullPointerException wordt veroorzaakt in de verklaring int i = t.x;
omdat “t” hier null is.
3. Java NullPointerException wanneer null wordt doorgegeven als methode-argument
Dit is een van de meest voorkomende gevallen van `java.lang.NullPointerException`, omdat het de aanroeper is die het nulargument doorgeeft.
De onderstaande afbeelding toont de null pointer-uitzondering wanneer het bovenstaande programma wordt uitgevoerd in Eclipse IDE.
4. java.lang.NullPointerException wanneer null wordt gegenereerd
Hieronder staat de stacktrace van de uitzondering van het bovenstaande programma, die een NullPointerException laat zien vanwege de `throw null;`-verklaring.
5. NullPointerException bij het ophalen van de lengte van een null-array
6. NullPointerException bij het openen van de indexwaarde van een null-array
7. NullPointerException bij synchronisatie op een null object
De synchronized(mutex)
zal een NullPointerException veroorzaken omdat het “mutex”-object null is.
8. HTTP-status 500 java.lang.NullPointerException
Soms krijgen we een foutpagina-reactie van een Java-webtoepassing met een foutmelding als “HTTP-status 500 – Interne serverfout” en als hoofdoorzaak java.lang.NullPointerException
.
Voor dit probleem heb ik de Spring MVC-voorbeeld-project aangepast en de HomeController-methode als volgt gewijzigd.
De onderstaande afbeelding toont de foutmelding die wordt gegenereerd door de reactie van de webtoepassing.
Hier is de uitzonderings-stacktrace:
De hoofdoorzaak is een NullPointerException in de instructie user.getUserId().toLowerCase()
omdat user.getUserId()
null retourneert.
Hoe een java.lang.NullPointerException te detecteren
Het detecteren van een NullPointerException is erg eenvoudig, kijk gewoon naar de uitzonderingstrace en het zal je de naam van de klasse en het regelnummer van de uitzondering tonen. Kijk dan naar de code en zie wat mogelijk null kan zijn waardoor de NullPointerException wordt veroorzaakt. Kijk gewoon naar alle bovenstaande voorbeelden, het is heel duidelijk uit de stacktrace wat de nullpointeruitzondering veroorzaakt.
Hoe NullPointerException te repareren
java.lang.NullPointerException is een ongecontroleerde uitzondering, dus we hoeven het niet te vangen. De null pointer-uitzonderingen kunnen worden voorkomen door null-controles en preventieve codeertechnieken te gebruiken. Bekijk hieronder codevoorbeelden die laten zien hoe je java.lang.NullPointerException kunt vermijden.
Beste coderingspraktijken om NullPointerException te vermijden
1. Laten we de onderstaande functie bekijken en letten op het scenario dat een nullpointeruitzondering veroorzaakt.
De NullPointerException kan optreden als het argument als null wordt doorgegeven. Dezelfde methode kan als volgt worden geschreven om NullPointerException te vermijden.
2. We kunnen ook een null-controle toevoegen voor het argument en IllegalArgumentException gooien indien nodig.
3. We kunnen de ternaire operator gebruiken zoals in het onderstaande voorbeeldcode.
4. Gebruik String.valueOf()
in plaats van de toString()
methode. Bijvoorbeeld controleer de code van de PrintStream println() methode die hieronder is gedefinieerd.
Het onderstaande codefragment toont het voorbeeld waar de valueOf() methode wordt gebruikt in plaats van toString().
5. Schrijf methoden die lege objecten retourneren in plaats van null waar mogelijk, bijvoorbeeld een lege lijst, lege string, enz.
6. Er zijn enkele methoden gedefinieerd in verzamelingsklassen om NullPointerException te vermijden, je zou ze moeten gebruiken. Bijvoorbeeld contains(), containsKey() en containsValue().
Referentie: API Document
Source:
https://www.digitalocean.com/community/tutorials/java-lang-nullpointerexception