logo

Iznimka nultog pokazivača u Javi

NullPointerException u Javi je RuntimeException. To se događa kada program pokuša upotrijebiti referencu objekta koja ima vrijednost null. U Javi 'null' je posebna vrijednost koja se može dodijeliti referencama na objekte kako bi se označilo nepostojanje vrijednosti.

Razlozi za iznimku nultog pokazivača

NullPointerException javlja se zbog sljedećih razloga: 

  • Pozivanje metode iz nultog objekta.
  • Pristup ili izmjena polja nultog objekta.
  • Uzimanje duljine od null kao da je niz.
  • Pristup ili izmjena utora nultih objekata kao da je niz.
  • Izbacivanje nule kao da je vrijednost koja se može izbaciti.
  • Kada pokušate sinkronizirati preko null objekta.

Primjer:



rhel protiv centosa
Java
public class Geeks {    public static void main(String[] args) {    // Reference set to null  String s = null;     System.out.println(s.length());   } } 

Izlaz:

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

Obrazloženje: U ovom primjeru referenca niza 's' je nula. Kada program pokuša pozvati metodu length(), izbacuje NullPointerException jer nema stvarnog objekta.

Zašto se null koristi u Javi?

Nulta vrijednost služi kao rezervirano mjesto i označava da nijedna vrijednost nije dodijeljena referentnoj varijabli. Uobičajene primjene uključuju:

  • Povezane strukture podataka : Predstavlja kraj liste ili grane stabla.
  • Dizajn uzorci : Ovo se koristi u obrascima kao što su Null Object Pattern ili Singleton Pattern.

Kako izbjeći NullPointerException

Kako bismo izbjegli NullPointerException, moramo osigurati da su svi objekti ispravno inicijalizirani prije nego što ih upotrijebimo. Kada deklariramo referentnu varijablu, moramo provjeriti da objekt nije null prije nego što od objekata zatražimo metodu ili polje.

nemoguća misija svi filmovi

1. Korištenje string literala u equals()

Vrlo čest problem slučaja uključuje usporedbu između String varijable i literala. Literal može biti String ili element Enuma. Umjesto pozivanja metode iz null objekta razmislite o pozivanju metode iz literala. 

Primjer:

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');  }  } } 

Izlaz
NullPointerException Caught

NullPointerException možemo izbjeći pozivanjem jednakosti na literalu umjesto na objektu.

hadoop uputstvo
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');  }  } } 

Izlaz
Not Same

Bilješka : Uvijek pozovite equals na literalu kako biste izbjegli pozivanje metode na nultoj referenci.

2. Provjera argumenata metode

Prije izvršavanja tijela nove metode prvo trebamo provjeriti njene argumente za null vrijednosti i nastaviti s izvršavanjem metode tek kada su argumenti pravilno provjereni. Inače će izbaciti IllegalArgumentException i obavijestiti pozivajuću metodu da nešto nije u redu s proslijeđenim argumentima. 

Primjer:

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();  } } 

Izlaz
0 13 IllegalArgumentException caught 

3. Koristite ternarni operator

Ternarni operator može se koristiti za izbjegavanje NullPointerException. Prvo se procjenjuje Boolean izraz. Ako je izraz istinit, vraća se vrijednost1, inače se vraća vrijednost2. Možemo koristiti ternarni operator za rukovanje nultim pokazivačima.

Primjer:

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);  } } 

Izlaz
Geeks 

Obrazloženje : Ternarni operator pomaže u provjeri null i izbjegavanju operacija na null referencama.

postaviti java

4. Korištenje izborne klase (Java 8+)

U Javi 8 Optional klasa uvedena je kao objekt spremnika koji može ali ne mora sadržavati vrijednost koja nije null. Pomaže u izbjegavanju NullPointerException prisiljavanjem da eksplicitno obradi slučaj kada je vrijednost odsutna.

Primjer:

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  } } 

Izlaz
Default Name 

Obrazloženje: Optional.ofNullable(value) omotava vrijednost koja bi mogla biti null. orElse() pruža zamjenu ako vrijednost nije prisutna.