Autor

Alejandro Alcalde

Data Scientist and Computer Scientist. Creator of this blog.

Más artículos de Alejandro Alcalde | Porfolio

Índice

Si has llegado aquí porque tienes problemas con facebook, tu respuesta está en este artículo: Qué Esta Causando Un NullPointerException en Facebook E Internet

El siguiente artículo es una traducción de una pregunta en stackOverflow del usuario ziggy, que preguntaba ¿Qué es un NullPointerException y cómo se puede solucionar?. La respuesta es del usuario vincent-ramdhanie

Cuando se declara una variable referencia (Un objeto), realmente se está creando un puntero a un objeto. Consideremos el siguiente código que declara un entero con el tipo de dato primitivo:

int x;
x = 10;

En el ejemplo la variable x es un int y JAva lo inicializa a 0. Cuando se le asigna el 10 en la segunda línea el valor se escribe el la posición de memoria a la que apunta x. Pero cuando la variable es de tipo referencia ocurre algo distinto. Por ejemplo:

Integer num;
num = new Integer(10);

La primera línea declara una variable llamada num, pero no contiene un valor primitivo como en el caso anterior. En su lugar contiene un puntero (Porque su tipo es Integer, de tipo referencia). Como hasta el momento no se le ha dicho hacia qué apuntar, Java le asigna Null, lo cual significa que no apunta a nada.

En la segunda línea, la palabra reservada new se usa para instanciar (o crear) un objeto de tipo Integer y la variable puntero num se asigna a éste objeto. Ahora se puede referenciar al objeto usando el operador de de-referencia . (El punto).

La excepción NullPointerException ocurre al declarar una variable y no crear el objeto. Si se intenta de-referenciar num antes de crear el objeto se obtiene un NullPointerException. En los casos más triviales el compilador capturará el problema e informará de él con el mensaje “num quizá no se haya inicializado” pero en otras ocasiones se escribirá código que no crea el objeto directamente.

Por ejemplo se puede tener un método como el siguiente:

public void doSomething(Integer num){
   // Usar num
}

En el cual no se está creando el objeto, si no asumiendo que fue creado antes de llamar al método doSomething. El problema es que puede que se llame al método así:

doSomething(null);

En cuyo caso num es Null. La mejor forma de evitar este tipo de excepciones es comprobar siempre si es null en caso de no haber creado el objeto nosotros mismos. Por tanto, doSomething() debería escribirse así:

public void doSomething(Integer num){
    if(num != null){
       // Usar num
    }
}

Referencias

¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.

Categorías:Etiquetas:

Quizá también te interese leer...