logo

Null Pointer Unntak i Java

Et NullPointerException i Java er et RuntimeException. Det oppstår når et program prøver å bruke en objektreferanse som har nullverdien. I Java er 'null' en spesiell verdi som kan tilordnes objektreferanser for å indikere fravær av en verdi.

Årsaker til Null Pointer Unntak

Et NullPointerException oppstår av følgende årsaker: 

  • Påkalle en metode fra et null-objekt.
  • Få tilgang til eller endre et null-objekts felt.
  • Tar lengden på null som om det var en matrise.
  • Å få tilgang til eller endre sporene til null-objekter som om det var en matrise.
  • Kaster null som om det var en kastverdi.
  • Når du prøver å synkronisere over et null-objekt.

Eksempel:



prøv catch block i java
Java
public class Geeks {    public static void main(String[] args) {    // Reference set to null  String s = null;     System.out.println(s.length());   } } 

Produksjon:

Hangup (SIGHUP)  
Exception in thread 'main' java.lang.NullPointerException
at Geeks.main(Geeks.java:10)

Forklaring: I dette eksemplet er strengreferansen 's' null. Når programmet prøver å kalle lengde()-metoden, kaster det et NullPointerException fordi det ikke er noe faktisk objekt.

python sorteringsordbok

Hvorfor brukes null i Java?

Nullverdien fungerer som en plassholder, og den indikerer at ingen verdi er tilordnet en referansevariabel. Vanlige applikasjoner inkluderer:

  • Koblede datastrukturer : Den representerer slutten av en liste eller tregren.
  • Design mønstre : Dette brukes i mønstre som Null Object Pattern eller Singleton Pattern.

Hvordan unngå NullPointerException

For å unngå NullPointerException må vi sørge for at alle objektene initialiseres riktig før vi bruker dem. Når vi erklærer en referansevariabel må vi bekrefte at objektet ikke er null før vi ber om en metode eller et felt fra objektene.

1. Bruke strengbokstaver i equals()

Et veldig vanlig kasusproblem involverer sammenligningen mellom en strengvariabel og en bokstavelig. Det bokstavelige kan være en streng eller et element i en Enum. I stedet for å påkalle metoden fra null-objektet, bør du vurdere å påkalle den fra det bokstavelige. 

Eksempel:

Java
import java.io.*; class Geeks {  public static void main (String[] args) {    // Initializing String variable with null value  String s = null;  // Checking if s.equals null  try  {  // This line of code throws NullPointerException because s is null  if (s.equals('gfg'))  System.out.print('Same');  else   System.out.print('Not Same');  }  catch(NullPointerException e)  {  System.out.print('NullPointerException Caught');  }  } } 

Produksjon
NullPointerException Caught

Vi kan unngå NullPointerException ved å kalle lik på bokstavelig i stedet for objekt.

Java
import java.io.*; class Geeks {  public static void main (String[] args) {    // Initializing String variable with null value  String s = null;  // Checking if s is null using try catch  try  {  if ('gfg'.equals(s))  System.out.print('Same');  else   System.out.print('Not Same');   }  catch(NullPointerException e)  {  System.out.print('Caught NullPointerException');  }  } } 

Produksjon
Not Same

Note : Påkall alltid lik på bokstaven for å unngå å kalle en metode på en nullreferanse.

2. Kontroll av metodeargumenter

Før vi kjører brødteksten til den nye metoden, bør vi først sjekke argumentene for nullverdier og fortsette med utførelse av metoden bare når argumentene er riktig sjekket. Ellers vil den kaste et IllegalArgumentException og varsle kallemetoden om at noe er galt med de beståtte argumentene. 

streng erstatte all java

Eksempel:

Java
import java.io.*; class Geeks {  public static void main(String[] args) {    // String s set an empty string and calling getLength()  String s = '';    try {  System.out.println(getLength(s));  }  catch (IllegalArgumentException e) {  System.out.println(  'IllegalArgumentException caught');  }  // String s set to a value and calling getLength()  s = 'GeeksforGeeks';    try {  System.out.println(getLength(s));  }  catch (IllegalArgumentException e) {  System.out.println(  'IllegalArgumentException caught');  }  // Setting s as null and calling getLength()  s = null;    try {  System.out.println(getLength(s));  }  catch (IllegalArgumentException e) {  System.out.println(  'IllegalArgumentException caught');  }  }  public static int getLength(String s)  {  if (s == null)  throw new IllegalArgumentException(  'The argument cannot be null');    return s.length();  } } 

Produksjon
0 13 IllegalArgumentException caught 

3. Bruk ternær operatør

Den ternære operatoren kan brukes for å unngå NullPointerException. Først blir det boolske uttrykket evaluert. Hvis uttrykket er sant, returneres verdi1 ellers returneres verdi2. Vi kan bruke den ternære operatoren for å håndtere null-pekere.

Eksempel:

prøv catch block java
Java
import java.io.*; class Geeks {  public static void main(String[] args)  {  String s = null;  String m = (s == null) ? '' : s.substring(0 5);  System.out.println(m);  s = 'Geeksforgeeks';  m = (s == null) ? '' : s.substring(0 5);  System.out.println(m);  } } 

Produksjon
Geeks 

Forklaring : Den ternære operatøren hjelper til med å sjekke for null og unngå operasjoner på nullreferanser.

4. Bruke valgfri klasse (Java 8+)

I Java 8 ble valgfri klasse introdusert som et beholderobjekt som kanskje inneholder en ikke-null-verdi. Det hjelper å unngå NullPointerException ved å tvinge til å eksplisitt behandle saken når en verdi mangler.

Eksempel:

Java
import java.util.Optional; public class OptionalExample {  public static void main(String[] args) {  Optional<String> name = Optional.ofNullable(null);  // Safe way to access  System.out.println(name.orElse('Default Name')); // prints: Default Name  } } 

Produksjon
Default Name 

Forklaring: Optional.ofNullable(value) bryter verdien som kan være null. orElse() gir en fallback hvis verdien ikke er tilstede.