? Hver Java -programmerer til slutt skriver et program som produserer " NullPointerExceptions " feilmelding. Det er spesielt kryptisk for de som begynner sine programmering karrierer ved å lære Java , som ikke medfører programmerere til konseptet med en peker . Pekere
En pekeren er en datavitenskap begrep for en variabel som , i stedet for å holde en bit av informasjon, har en adresse til hvor denne informasjonen kan bli funnet i datamaskinens minne . Du kan forestille deg variabelen som en veiviser som "poeng " til hvor informasjonen kan finnes . I språk som C + + , har programmereren å lage et eksplisitt valg om hvorvidt en gitt variabel vil holde informasjonen direkte eller vil i stedet holde en peker til informasjon og dette valget kan ha en dyp effekt på effektiviteten av programmet. For eksempel, hvis en gitt klasse har noen få megabyte verdt informasjon som må sendes inn i en funksjon , er det langt mer effektivt å gi funksjonen en peker enn å kopiere all informasjon direkte .
Java sparer programmerere dette dilemmaet og feilene det kan produsere ved å skjule pekere fra programmereren.
Null
Null er en annen spesiell term i informatikk. Det refererer til en variabel som praktisk talt ikke inneholder noen informasjon. Inntil noen opplysninger er tildelt det , sies det å være lik null . For eksempel i følgende kode :
String s , s = new String ();
Etter den første linjen er ferdig , "s" er lik null . Etter den andre linjen er ferdig , "s" er lik en tom streng .
NULL-pekere
Selv om Java forsøker å skjule pekere fra programmerer, en forekomst når den ikke kan gjøre det. Alle klasser er faktisk pekere til minneplasser hvor dataene for klassen kan bli funnet. Dette gjør det raskere når klassene må være bestått inn og ut av funksjoner. Men i eksempelet ovenfor , etter den første linjen er kjørt, har en peker blitt satt til side for " s ", men ingen data har blitt opprettet . "s" har ikke noe minne satt av til det, så det er en " null -pekeren. "
Null Pointer Unntak
Nå som du vet hva en null pekeren er , bør du vurdere følgende to linjer med kode :
String s; s.charAt ( 0 ), //Få det første tegnet i strengen
koden ber om det første tegnet av . en streng objekt som rett og slett ikke eksisterer . Med andre ord, det er å be om det umulige. Så snart dette skjer , innser Java problemet og kaster en " NullPointerException " for å la brukeren eller programmerer vet at noe har gått galt .
Eksempel
fleste Java-programmerere ville aldri gjøre det over feil : de vet objekter som strenger må startes opp med den "nye " kommandoen . Imidlertid vurdere følgende funksjon : en
public void print ( String s ) { System.out.println ( s ) ;}
utgangspunktet ser denne koden fine: funksjonen mottar en String fra andre steder i programmet og skriver den til skjermen. Men hva om den personen som kjører funksjon som sendes er en streng som ikke var riktig initialisert ? En NullPointerException ville bli kastet .
Feilsøking og hindre
første skritt for å hindre NullPointerExceptions er å sikre at nye klasse objekter er alltid riktig initialisert. Men , ingen er perfekt, så det andre trinnet er å komme inn i vanen med å utføre data politiarbeid for funksjoner. Innkommende data skal alltid behandles som upålitelige , så følgende endringer kan gjøres : en
public boolean print (String s ) { try { System.out.println ( s ); return true; //La resten av programmet vet operasjonen var vellykket } catch ( NullPointerException e ) {return false; . . //La resten av programmet vet operasjonen mislyktes } }
fordelen med denne proaktive tilnærmingen er at resten av programmet kan skrives å bedømme hvor alvorlig problemet er , snarere enn umiddelbart mislykkes og gi brukeren en stygg og kryptisk feilmelding.