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 intJava
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:
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'); } } }
Lähtö
NullPointerException Caught
Voimme välttää NullPointerExceptionin kutsumalla yhtäläisiä kirjaimella objektin sijaan.
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'); } } }
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 javaJava
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:
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); } }
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:
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 } }
Lähtö
Default Name
Selitys: Optional.ofNullable(value) rivittää arvon, joka voi olla nolla. orElse() tarjoaa varavaihtoehdon, jos arvoa ei ole.