java.lang.NullPointerException è una delle più popolari eccezioni in java nella programmazione. Chiunque lavori in java deve aver visto questo apparire dal nulla nel programma standalone di java così come nell’applicazione web java.
java.lang.NullPointerException
NullPointerException è un’eccezione di runtime, quindi non abbiamo bisogno di catturarla nel programma. NullPointerException viene sollevata in un’applicazione quando stiamo cercando di fare qualche operazione su null dove è richiesto un oggetto. Alcune delle ragioni comuni per NullPointerException nei programmi java sono:
- Invocare un metodo su un’istanza di oggetto ma a runtime l’oggetto è null.
- Accedere a variabili di un’istanza di oggetto che è null a runtime.
- Lanciare null nel programma
- Accedere all’indice o modificare il valore di un indice di un array che è null
- Controllare la lunghezza di un array che è null a runtime.
Esempi di Java NullPointerException
Diamo un’occhiata ad alcuni esempi di NullPointerException nei programmi Java.
1. NullPointerException durante la chiamata di un metodo di istanza
Quando eseguiamo il programma sopra, viene generato il seguente messaggio di errore NullPointerException.
Ottieniamo NullPointerException nella dichiarazione t.foo("Ciao");
perché “t” è null in questo punto.
2. Java NullPointerException durante l’accesso/modifica di un campo di un oggetto null
Il programma sopra genera la seguente traccia di stack NullPointerException.
NullPointerException viene generata nella dichiarazione int i = t.x;
perché “t” è null in questo punto.
3. Java NullPointerException quando viene passato null come argomento del metodo
Questo è uno degli eventi più comuni di `java.lang.NullPointerException` perché è chi chiama a passare l’argomento nullo.
L’immagine sottostante mostra l’eccezione del puntatore nullo quando il programma precedente viene eseguito nell’IDE Eclipse.
4. java.lang.NullPointerException quando viene lanciato il null
Sotto è la traccia dello stack dell’eccezione del programma precedente, mostrando NullPointerException a causa dell’istruzione `throw null;`.
5. NullPointerException quando si ottiene la lunghezza di un array nullo
6. NullPointerException quando si accede al valore dell’indice di un array nullo
7. NullPointerException quando sincronizzato su un oggetto nullo
Il synchronized(mutex)
genererà una NullPointerException perché l’oggetto “mutex” è nullo.
8. Stato HTTP 500 java.lang.NullPointerException
A volte otteniamo una risposta di pagina di errore da un’applicazione web Java con un messaggio di errore come “Stato HTTP 500 – Errore interno del server” e la causa principale è java.lang.NullPointerException
.
Per questo, ho modificato il progetto dell’Esempio Spring MVC e ho modificato il metodo HomeController come segue.
Nell’immagine sottostante è mostrato il messaggio di errore generato dalla risposta dell’applicazione web.
Ecco la traccia delle eccezioni:
La causa principale è NullPointerException nella dichiarazione user.getUserId().toLowerCase()
perché user.getUserId()
restituisce null.
Come rilevare java.lang.NullPointerException
Rilevare NullPointerException è molto facile, basta guardare la traccia dell’eccezione e ti mostrerà il nome della classe e il numero di riga dell’eccezione. Poi guarda il codice e vedi cosa potrebbe essere nullo causando il NullPointerException. Basta guardare tutti gli esempi precedenti, è molto chiaro dalla traccia dello stack cosa sta causando l’eccezione del puntatore nullo.
Come risolvere NullPointerException
java.lang.NullPointerException è un’eccezione non controllata, quindi non dobbiamo catturarla. Le eccezioni del puntatore nullo possono essere prevenute utilizzando controlli null e tecniche di codifica preventive. Guarda gli esempi di codice qui sotto che mostrano come evitare java.lang.NullPointerException
.
Pratiche migliori di codifica per evitare NullPointerException
1. Consideriamo la funzione sottostante e cerchiamo di individuare lo scenario che causa un’eccezione di puntatore nullo.
La NullPointerException può verificarsi se viene passato un argomento come null. Lo stesso metodo può essere scritto come segue per evitare NullPointerException.
2. Possiamo anche aggiungere un controllo null per l’argomento e lanciare IllegalArgumentException se necessario.
3. Possiamo usare l’operatore ternario come mostrato nell’esempio di codice sottostante.
4. Utilizzare String.valueOf()
piuttosto che il metodo toString()
. Ad esempio, controlla che il codice del metodo PrintStream println() sia definito come segue.
Il frammento di codice sottostante mostra l’esempio in cui viene utilizzato il metodo valueOf() invece di toString().
5. Scrivere metodi che restituiscano oggetti vuoti anziché null ovunque possibile, ad esempio, lista vuota, stringa vuota, ecc.
6. Ci sono alcuni metodi definiti nelle classi di raccolta per evitare NullPointerException, dovresti utilizzarli. Ad esempio contains(), containsKey(), e containsValue().
Riferimento: Documento API
Source:
https://www.digitalocean.com/community/tutorials/java-lang-nullpointerexception