Elk Java programmeur schrijft uiteindelijk een programma dat de " NullPointerExceptions " foutmelding produceert . Het is bijzonder cryptisch aan degenen die beginnen hun programmering loopbaan door het leren van Java , die programmeurs niet blootstelt aan het concept van een pointer . Pointers Een pointer is een computer science term voor een variabele die , in plaats van het houden van een beetje informatie , houdt een adres waar die informatie kan worden gevonden in het geheugen van een computer . Je kunt je de variabele als een wegwijzer die "punten" aan waar de informatie kan worden gevonden . In talen zoals C + + , de programmeur moet een expliciete keuze te maken over de vraag of een bepaalde variabele informatie rechtstreeks zal houden of zullen houden in plaats daarvan een pointer naar de informatie en deze keuze kan een diepgaand effect op de efficiëntie van het programma te hebben. Bijvoorbeeld , wanneer een bepaalde klasse heeft enkele megabytes waarde van informatie die in een functie wordt afgelegd , is het veel efficiënter om de functie een pointer dan alle opvragen kopiëren geeft . Java onderdelen programmeurs dit dilemma en de bugs het kan produceren door het verbergen wijzers van de programmeur . Null Null is een speciale term in de informatica . Het verwijst naar een variabele die letterlijk geen informatie bevat . Tot wat informatie wordt toegewezen , wordt gezegd gelijk aan null zijn. Bijvoorbeeld , in de volgende code : String s ; s = new String ( ) ; Na de eerste lijn klaar is , " s " is gelijk aan null . Na de tweede lijn klaar is , " s " is gelijk aan een lege string . Null Pointers Hoewel Java probeert pointers verbergen voor de programmeur, er is een geval als het niet kan doen . Alle lessen zijn eigenlijk pointers naar het geheugen locaties waar de gegevens voor de klas kan worden gevonden . Dit maakt het sneller wanneer klassen moeten worden doorgegeven en uit functies . Echter , in het bovenstaande voorbeeld , na de eerste regel wordt uitgevoerd , een pointer is gereserveerd voor " s ", maar er geen gegevens zijn aangemaakt . " s " heeft geen geheugen gereserveerd voor het, dus het is een ' null pointer . " Null Pointer Uitzonderingen Nu dat je weet wat een null pointer is , overweeg dan de volgende twee regels code : String s ; s.charAt ( 0 ) ; //Haal het eerste teken van de string de code vraagt om het eerste teken van . een string object dat simpelweg niet bestaat . Met andere woorden , het is het onmogelijke vragen . Zodra dit gebeurt , Java realiseert het probleem en gooit een " NullPointerException " te laten de gebruiker of de programmeur weet dat er iets mis is gegaan . Voorbeeld meeste Java-programmeurs nooit zou maken van de bovenstaande fout : ze weten objecten zoals strings moet worden geïnitialiseerd met de " nieuwe " commando . Maar denk eens aan de volgende functie : public void afdruk ( String s ) { System.out.println ( s ) ; } Aanvankelijk deze code ziet er goed uit : de functie ontvangt een string uit elders in het programma en drukt het aan het scherm . Maar wat als de persoon die de functie stuurde is een string die niet goed was geïnitialiseerd ? Een NullPointerException zou worden geworpen . Debuggen en voorkomen De eerste stap tot het voorkomen NullPointerExceptions is ervoor te zorgen dat de nieuwe klasse objecten worden altijd correct geïnitialiseerd . Echter , niemand is perfect , dus de tweede stap is om in de gewoonte van het uitvoeren van gegevens politiewerk voor functies . Binnenkomende gegevens moeten altijd worden behandeld als onbetrouwbaar , dus de volgende wijzigingen kunnen worden aangebracht : openbare boolean afdruk ( String s ) { try { System.out.println ( s ) ; return true ; //Laat de rest van het programma kennen de operatie succesvol was } catch ( NullPointerException e ) { return false; . . //Laat de rest van het programma kennen de bewerking is mislukt } } het voordeel van deze proactieve benadering is dat de rest van het programma kan worden geschreven om te beoordelen hoe ernstig het probleem is , in plaats van onmiddellijk mislukken en een lelijke en cryptische foutmelding geven de gebruiker .
|