? Varje Java programmerare småningom skriver ett program som producerar " NullPointerExceptions " felmeddelande. Det är särskilt kryptisk för dem som börjar sin programmering karriär genom att lära sig Java , som inte utsätter programmerare att begreppet en pekare . Pekare
En pekare är en datavetenskap term för en variabel som , i stället för att hålla en bit av information , har en adress till var informationen kan hittas i en dators minne . Ni kan föreställa er den variabel som en vägvisare som "pekar " till var informationen kan hittas . I språk som C + + , har programmeraren att göra ett uttryckligt beslut om huruvida en viss variabel kommer att hålla informationen direkt eller kommer i stället att hålla en pekare till information och detta val kan ha en djupgående inverkan på effektiviteten i programmet . Till exempel, om en viss klass har några megabyte värde av information som ska föras in i en funktion , är det mycket effektivare att ge funktionen en pekare än att kopiera all information direkt .
Java reservdelar programmerare detta dilemma och buggar kan producera genom att gömma pekare från programmeraren . Addera Null
Null är en annan speciell term i datavetenskap . Den hänvisar till en variabel som bokstavligen inte innehåller någon information . Tills viss information tilldelas det , det sägs vara lika med noll . Till exempel i följande kod :
String s , s = new String ( ) ;
Efter den första linjen är klar , " s " är lika med noll . Efter den andra linjen är klar , " s " är lika med en tom sträng .
Null Pekare
Även Java försöker dölja pekare från programmeraren , det finns en instans när det inte kan göra det . Alla klasser är faktiskt pekare till minnesplatser där data för klassen kan hittas . Detta gör det snabbare när klasser måste kunna passera in och ut ur funktioner . Men i exemplet ovan , efter den första raden körs , har en pekare avsatts för " s ", men inga uppgifter har skapats . " s " har inget minne avsatt för det , så det är en " null pekare . "
nollpekare Undantag
Nu när du vet vad en null- pekare är Tänk på följande två kodrader :
String s; s.charAt ( 0 ) , //Hämta det första tecknet i strängen
koden ber om det första tecknet . en sträng objekt som helt enkelt inte existerar . Med andra ord är det ber om det omöjliga. Så snart detta sker , inser Java problemet och kastar en " NullPointerException " för att låta användaren eller programmeraren vet att något har gått fel .
Exempel
flesta Java programmerare skulle aldrig göra ovanstående misstag: de vet föremål som strängar måste initieras med den " nya " kommandot . Dock anser följande funktion :
public void print ( String s ) { System.out.println (s ) ;}
Inledningsvis ser denna kod böterna: Funktionen tar emot en sträng från någon annanstans i programmet och skriver ut den på skärmen . Men vad händer om den personen som kör funktionen skickas en sträng som inte var ordentligt initierats ? En NullPointerException skulle kastas . Felsökning och förebygga
Det första steget för att förhindra NullPointerExceptions är att säkerställa att nya klassobjekt är alltid korrekt initieras Addera . Men ingen är perfekt , så det andra steget är att komma in i vanan att utföra uppgifter polisarbete för funktioner . Inkommande data alltid bör behandlas som opålitliga , så följande ändringar kan göras :
public boolean print ( String s ) { try { System.out.println (s ) , return true ; //Låt resten av programmet vet operationen var lyckad } catch ( NullPointerException e ) {return false; . . //Låt resten av programmet vet operationen misslyckades } }
fördelen med denna proaktiva strategi är att resten av programmet kan skrivas att bedöma hur allvarligt problemet är , snarare än omedelbart misslyckas och ger användaren en ful och kryptiskt felmeddelande .