Nwlapcug.com


Che cosa è un'eccezione di puntatore nullo?

Che cosa è un'eccezione di puntatore nullo?


Ogni programmatore Java alla fine scrive un programma che produce il \"NullPointerExceptions\" messaggio di errore. È particolarmente criptico a coloro che stanno iniziando la loro carriera programmazione imparando Java, che non espone i programmatori al concetto di un puntatore.

Puntatori

Un puntatore è un termine di scienza di computer per una variabile che, invece di tenere un po ' di informazioni, contiene un indirizzo al quale possono essere trovate le informazioni nella memoria del computer. Potete immaginare la variabile come un cartello che \"points\" a cui le informazioni possono essere trovate. In linguaggi come C++, il programmatore deve fare una scelta esplicita circa se una determinata variabile conterrà le informazioni direttamente o terrà invece un puntatore alle informazioni e questa scelta può avere un profondo effetto sull'efficienza del programma. Ad esempio, se una determinata classe contiene pochi megabyte vale la pena di informazioni che deve essere passato in una funzione, è molto più efficiente per dare la funzione un puntatore rispetto alla copia tutte le informazioni direttamente.

Java non risparmia i programmatori questo dilemma e gli insetti che può produrre nascondendo i puntatori dal programmatore.

Null

Null è un altro termine speciale in informatica. Si riferisce a una variabile che letteralmente non contiene alcuna informazione. Fino a quando alcune informazioni viene assegnate ad esso, si dice di essere uguale a null. Ad esempio, nel codice seguente:

Stringa s
VAI
s = new String ();

Dopo la prima riga è finito, \"s\" è uguale a null. Dopo la seconda linea è terminata, \"s\" è uguale a una stringa vuota.

Puntatori null

Anche se Java tenta di nascondere i puntatori dal programmatore, esiste un'istanza quando non può farlo. Tutte le classi sono in realtà i puntatori alle locazioni di memoria dove si trovano i dati per la classe. Questo rende più veloce quando le classi devono essere passate dentro e fuori le funzioni. Tuttavia, nell'esempio precedente, dopo aver eseguita la prima linea, un puntatore è stato accantonato per \"s,\" ma nessun dato è stato creato. \"s\" non ha memoria accantonato per esso, quindi è un puntatore \"null. \"

Eccezioni di puntatore null

Ora che sai che un puntatore null è, considerare le seguenti due righe di codice:

String s;
s.charAt(0); Ottenere il primo carattere della stringa.

Il codice sta chiedendo per il primo carattere di un oggetto string che semplicemente non esiste. In altre parole, sta chiedendo l'impossibile. Non appena questo si verifica, Java si rende conto il problema e genera un \"NullPointerException\" per consentire all'utente o il programmatore sa che qualcosa è andato storto.

Esempio

Maggior parte dei programmatori Java non sarebbe mai fare l'errore di cui sopra: sanno che oggetti come stringhe devono essere inizializzati con il \"new\" comando. Tuttavia, si consideri la seguente funzione:

Public Sub print (String s) {
System.out.println(s)
VAI
}

Inizialmente, questo codice sembra corretto: la funzione riceve una stringa da altrove nel programma e la stampa sullo schermo. Tuttavia, se la persona che esegue la funzione di mandato è una stringa che non è stata inizializzata correttamente? Verrà generata una NullPointerException.

Debug e prevenire

Il primo passo per prevenire NullPointerException consiste nel garantire che nuova classe gli oggetti vengono sempre correttamente inizializzati. Tuttavia, nessuno è perfetto, quindi il secondo passo è quello di prendere l'abitudine di eseguire dati di polizia per le funzioni. Dati in arrivo dovrebbero essere sempre trattati come inaffidabile, quindi potrebbe essere fatto la seguente modifica:

public boolean stampa (String s) {
try {
System.out.println(s)
VAI
Restituisce true; Informare il resto del programma che l'operazione è riuscita.
} catch (NullPointerException e) {
restituire false; Comunicare il resto del programma l'operazione non riuscita.
}
}

Il vantaggio di questo approccio proattivo è che il resto del programma può essere scritto a giudicare solo quanto sia grave il problema è, piuttosto che immediatamente esito negativo e dare all'utente un messaggio di errore criptico e brutto.