Qual è un'eccezione Null Pointer?

April 14

Qual è un'eccezione Null Pointer?


Ogni programmatore Java infine scrive un programma che produce i "NullPointerExceptions \" \ messaggio di errore. E 'particolarmente criptico a coloro che stanno cominciando la loro carriera di programmazione per l'apprendimento di Java, che non espone i programmatori al concetto di un puntatore.

puntatori

Un puntatore è un termine informatico per una variabile che, invece di tenere un po 'di informazioni, detiene un indirizzo a cui le informazioni si possono trovare nella memoria di un computer. Si può immaginare la variabile come un cartello che \ "punti \" per cui le informazioni si possono trovare. In linguaggi come C ++, il programmatore deve fare una scelta esplicita circa se una data variabile terrà direttamente le informazioni o sarà invece in possesso di un puntatore alle informazioni e questa scelta può avere un profondo effetto sulla efficienza del programma. Ad esempio, se una data classe contiene pochi megabyte valore di informazioni che deve essere superato in una funzione, è molto più efficace per dare alla funzione un puntatore di copiare direttamente tutte le informazioni.

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

Nullo

Null è un altro termine speciale in informatica. Si riferisce a una variabile che contiene letteralmente alcuna informazione. Fino a qualche informazione viene assegnato ad esso, si dice che sia uguale a null. Ad esempio, nel codice seguente:

Archi
ANDARE
s = new String ();

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

puntatori NULL

Anche se Java tenta di nascondere i puntatori dal programmatore, vi è un caso quando non può farlo. Tutte le classi sono in realtà puntatori a locazioni di memoria in cui i dati per la classe possono essere trovati. Questo rende più veloce quando le classi devono essere trasferiti in e fuori di funzioni. Tuttavia, nell'esempio di cui sopra, dopo la prima riga viene eseguito, un puntatore è stato accantonato per \ "s, \", ma nessun dato è stato creato. \ "S \" non ha memoria mettere da parte per essa, quindi è un \ "puntatore nullo. \"

Eccezioni Null Pointer

Ora che sapete che cosa è un puntatore nullo, considerare le seguenti due righe di codice:

Archi;
s.charAt (0); // Prendi il primo carattere della stringa.

Il codice chiede il primo carattere di un oggetto stringa che semplicemente non esiste. In altre parole, esso chiede l'impossibile. Non appena questo accade, Java si rende conto del problema e lancia un \ "NullPointerException \" per lasciare che l'utente o il programmatore sa che qualcosa è andato storto.

Esempio

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

print public void (String s) {
System.out.println (s)
ANDARE
}

Inizialmente, questo codice guarda bene: la funzione riceve una stringa da altre parti del programma e lo stampa sullo schermo. Tuttavia, cosa succede se la persona che esegue la funzione di inviato è una stringa che non è stata correttamente inizializzata? Un NullPointerException sarebbe stato gettato.

Debug e Prevenzione

Il primo passo per prevenire NullPointerExceptions è garantire che i nuovi oggetti di prima classe sono sempre correttamente inizializzati. Tuttavia, nessuno è perfetto, in modo che il secondo passo è quello di ottenere l'abitudine di eseguire polizia i dati per le funzioni. i dati in entrata devono essere sempre trattati come inaffidabile, quindi la seguente modifica potrebbe essere fatto:

print public boolean (String s) {
provare {
System.out.println (s)
ANDARE
return true; // Che il resto del programma conosce l'operazione ha avuto successo.
} Catch (NullPointerException e) {
return false; // Che il resto del programma conosce l'operazione non è riuscita.
}
}

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