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 centosaJava
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:
Javaimport 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 uputstvoJava
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:
Javaimport 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:
Javaimport 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:
Javaimport 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.