logo

Izjema ničelnega kazalca v Javi

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 tabele
Java
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:

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

Izhod
NullPointerException Caught

Izjemi NullPointerException se lahko izognemo tako, da kličemo equals za literal namesto za 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');  }  } } 

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:

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

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

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:

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

Izhod
Default Name 

Pojasnilo: Optional.ofNullable(value) ovije vrednost, ki je lahko ničelna. orElse() nudi nadomestno možnost, če vrednost ni prisotna.