Java LanguageInsidie ​​di Java - Nulls e NullPointerException


Osservazioni

Il valore null è il valore predefinito per un valore non inizializzato di un campo il cui tipo è un tipo di riferimento.

NullPointerException (o NPE) è l'eccezione che viene generata quando si tenta di eseguire un'operazione inappropriata sul riferimento all'oggetto null . Tali operazioni includono:

  • chiamando un metodo di istanza su un oggetto di destinazione null ,
  • accedere a un campo di un oggetto obiettivo null ,
  • tentando di indicizzare un oggetto array null o accedere alla sua lunghezza,
  • usando un riferimento oggetto null come mutex in un blocco synchronized ,
  • casting di un oggetto null riferimento,
  • unboxing di un riferimento a oggetti null e
  • lancio di un riferimento a oggetto null .

Le cause principali più comuni per gli NPE:

  • dimenticando di inizializzare un campo con un tipo di riferimento,
  • dimenticando di inizializzare elementi di una matrice di un tipo di riferimento, o
  • non testare i risultati di determinati metodi API che vengono specificati come restituire null in determinate circostanze.

Esempi di metodi comunemente usati che restituiscono null includono:

  • Il metodo get(key) nell'API di Map restituirà un valore null se lo chiami con una chiave che non ha una mappatura.
  • I getResource(path) e getResourceAsStream(path) nelle API ClassLoader e Class restituiranno null se non è possibile trovare la risorsa.
  • Il metodo get() nell'API di Reference restituirà null se il garbage collector ha cancellato il riferimento.
  • Vari metodi getXxxx nelle API servlet Java EE restituiscono null se si tenta di recuperare un parametro di richiesta inesistente, un attributo di sessione o sessione e così via.

Esistono strategie per evitare NPE indesiderati, come test espliciti per null o usando "Yoda Notation", ma queste strategie spesso hanno il risultato indesiderato di nascondere i problemi nel codice che dovrebbero essere corretti.

Insidie ​​di Java - Nulls e NullPointerException Esempi correlati