logo

Nollaosoittimen poikkeus Javassa

NullPointerException Javassa on RuntimeException. Se tapahtuu, kun ohjelma yrittää käyttää objektiviittausta, jolla on nolla-arvo. Javassa "null" on erityinen arvo, joka voidaan antaa objektiviittauksille osoittamaan arvon puuttumista.

Syitä nollaosoittimen poikkeukseen

NullPointerException tapahtuu seuraavista syistä: 

  • Metodin kutsuminen nollaobjektista.
  • Nollaobjektin kentän käyttö tai muokkaaminen.
  • Otetaan nollan pituus ikään kuin se olisi taulukko.
  • Nollaobjektien paikkojen käyttäminen tai muokkaaminen ikään kuin se olisi taulukko.
  • Nollan heittäminen ikään kuin se olisi heitettävissä oleva arvo.
  • Kun yrität synkronoida nollaobjektin yli.

Esimerkki:



jäsentää merkkijono int
Java
public class Geeks {    public static void main(String[] args) {    // Reference set to null  String s = null;     System.out.println(s.length());   } } 

Lähtö:

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

Selitys: Tässä esimerkissä merkkijonoviittaus 's' on tyhjä. Kun ohjelma yrittää kutsua pituus()-metodia, se heittää NullPointerExceptionin, koska varsinaista objektia ei ole.

esimerkki listasta javassa

Miksi Javassa käytetään nulla?

Nolla-arvo toimii paikkamerkkinä ja osoittaa, että viitemuuttujalle ei ole määritetty arvoa. Yleisiä sovelluksia ovat:

  • Linkitetyt tietorakenteet : Se edustaa luettelon tai puun oksan loppua.
  • Suunnittelumallit : Tätä käytetään kuvioissa, kuten Null Object Pattern tai Singleton Pattern.

NullPointerExceptionin välttäminen

NullPointerExceptionin välttämiseksi meidän on varmistettava, että kaikki objektit on alustettu oikein ennen kuin käytämme niitä. Kun ilmoitamme viitemuuttujan, meidän on varmistettava, että objekti ei ole tyhjä, ennen kuin pyydämme objektilta menetelmää tai kenttää.

1. Merkkijonojen käyttäminen yhtälössä()

Hyvin yleinen tapausongelma liittyy merkkijonomuuttujan ja literaalin vertailuun. Literaali voi olla merkkijono tai Enumin elementti. Sen sijaan, että kutsuisit metodin nollaobjektista, harkitse sen kutsumista literaalista. 

Esimerkki:

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

Lähtö
NullPointerException Caught

Voimme välttää NullPointerExceptionin kutsumalla yhtäläisiä kirjaimella objektin sijaan.

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

Lähtö
Not Same

Huom : Kutsu aina yhtä kuin literaalissa, jotta menetelmää ei kutsuta nollaviittaukselle.

2. Menetelmän argumenttien tarkistus

Ennen uuden menetelmän rungon suorittamista meidän tulee ensin tarkistaa sen argumenttien nolla-arvot ja jatkaa menetelmän suorittamista vasta, kun argumentit on tarkistettu oikein. Muussa tapauksessa se heittää IllegalArgumentExceptionin ja ilmoittaa kutsutavalle, että välitetyissä argumenteissa on jotain vialla. 

merkintä kuvilla

Esimerkki:

kuinka muuntaa char merkkijonoksi java
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();  } } 

Lähtö
0 13 IllegalArgumentException caught 

3. Käytä Ternary Operatoria

Kolmiosaista operaattoria voidaan käyttää NullPointerExceptionin välttämiseen. Ensin Boolen lauseke arvioidaan. Jos lauseke on tosi, arvo1 palautetaan, muuten arvo2 palautetaan. Voimme käyttää kolmiosaista operaattoria nollaosoittimien käsittelyyn.

Esimerkki:

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

Lähtö
Geeks 

Selitys : Kolmiosainen operaattori auttaa tarkistamaan nolla-arvon ja välttämään toimintoja nollaviittauksilla.

4. Valinnaisen luokan käyttäminen (Java 8+)

Java 8:ssa Optional-luokka otettiin käyttöön konttiobjektina, joka voi sisältää tai ei sisällä muuta kuin nolla-arvoa. Se auttaa välttämään NullPointerException pakottamalla nimenomaisesti käsittelemään tapausta, jossa arvo puuttuu.

Esimerkki:

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

Lähtö
Default Name 

Selitys: Optional.ofNullable(value) rivittää arvon, joka voi olla nolla. orElse() tarjoaa varavaihtoehdon, jos arvoa ei ole.