NullPointerException v Javi je RuntimeException. Do tega pride, ko program poskuša uporabiti referenco objekta, ki ima ničelno vrednost. V Javi je 'null' posebna vrednost, ki jo je mogoče dodeliti sklicem na objekte, da označijo odsotnost vrednosti.
Razlogi za izjemo ničelnega kazalca
Do izjeme NullPointerException pride zaradi naslednjih razlogov:
- Priklic metode iz ničelnega objekta.
- Dostopanje ali spreminjanje polja ničelnega predmeta.
- Vzemite dolžino null, kot da bi bila matrika.
- Dostopanje ali spreminjanje rež ničelnih objektov, kot da bi šlo za polje.
- Vrženje ničelne vrednosti, kot da bi bila vrednost, ki jo je mogoče vrniti.
- Ko poskušate sinhronizirati prek ničelnega objekta.
primer:
pogledi in tabeleJava
public class Geeks { public static void main(String[] args) { // Reference set to null String s = null; System.out.println(s.length()); } }
Izhod:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.NullPointerException
at Geeks.main(Geeks.java:10)
Pojasnilo: V tem primeru je referenca niza 's' ničelna. Ko program poskuša poklicati metodo length(), vrže izjemo NullPointerException, ker dejanskega predmeta ni.
razvrsti matrični seznam
Zakaj se v Javi uporablja null?
Ničelna vrednost služi kot ograda in označuje, da referenčni spremenljivki ni dodeljena nobena vrednost. Pogoste aplikacije vključujejo:
- Povezane podatkovne strukture : Predstavlja konec seznama ali veje drevesa.
- Oblikovalski vzorci : To se uporablja v vzorcih, kot sta vzorec ničelnega predmeta ali vzorec posameznega predmeta.
Kako se izogniti izjemi NullPointerException
Da bi se izognili izjemi NullPointerException, moramo zagotoviti, da so vsi objekti pravilno inicializirani, preden jih uporabimo. Ko deklariramo referenčno spremenljivko, moramo preveriti, da objekt ni ničelna vrednost, preden od objektov zahtevamo metodo ali polje.
1. Uporaba nizovnih literalov v equals()
Zelo pogosta težava s primeri vključuje primerjavo med spremenljivko String in literalom. Literal je lahko niz ali element enuma. Namesto da bi metodo priklicali iz ničelnega objekta, jo razmislite o priklicu iz literala.
primer:
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'); } } }
Izhod
NullPointerException Caught
Izjemi NullPointerException se lahko izognemo tako, da kličemo equals za literal namesto za objekt.
Javaimport 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'); } } }
Izhod
Not Same
Opomba : vedno prikličite enako na literal, da se izognete klicu metode na ničelnem sklicu.
2. Preverjanje argumentov metode
Preden izvedemo telo nove metode, najprej preverimo njene argumente za ničelne vrednosti in nadaljujemo z izvajanjem metode šele, ko so argumenti pravilno preverjeni. V nasprotnem primeru bo vrgel IllegalArgumentException in obvestil klicno metodo, da je s posredovanimi argumenti nekaj narobe.
vzorec javascripta
primer:
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(); } }
Izhod
0 13 IllegalArgumentException caught
3. Uporabite ternarni operater
S ternarnim operatorjem se lahko izognete NullPointerException. Najprej se ovrednoti logični izraz. Če je izraz resničen, je vrnjena vrednost1, drugače je vrnjena vrednost2. Za obdelavo ničelnih kazalcev lahko uporabimo ternarni operator.
primer:
zamenjaj vseJava
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); } }
Izhod
Geeks
Razlaga : Ternarni operater pomaga preveriti ničelne vrednosti in se izogniti operacijam na ničelnih referencah.
4. Uporaba neobveznega razreda (Java 8+)
V Javi 8 Izbirni razred je bil uveden kot vsebniški objekt, ki lahko vsebuje ali pa tudi ne ničelno vrednost. Pomaga pri izogibanju NullPointerException tako, da prisili, da eksplicitno obravnava primer, ko vrednost ni.
primer:
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 } }
Izhod
Default Name
Pojasnilo: Optional.ofNullable(value) ovije vrednost, ki je lahko ničelna. orElse() nudi nadomestno možnost, če vrednost ni prisotna.