java.lang.NullPointerException es una de las excepciones más populares en java programación. Cualquiera que trabaje en java debe haber visto cómo aparece de la nada en el programa independiente de java, así como en la aplicación web de java.
java.lang.NullPointerException
NullPointerException es una excepción en tiempo de ejecución, por lo que no necesitamos atraparla en el programa. NullPointerException se genera en una aplicación cuando intentamos realizar alguna operación en null donde se requiere un objeto. Algunas de las razones comunes para NullPointerException en programas java son:
- Invocar un método en una instancia de objeto pero en tiempo de ejecución el objeto es null.
- Acceder a variables de una instancia de objeto que es null en tiempo de ejecución.
- Lanzar null en el programa
- Acceder al índice o modificar el valor de un índice de un array que es null
- Comprobar la longitud de un array que es null en tiempo de ejecución.
Ejemplos de NullPointerException en Java
Veamos algunos ejemplos de NullPointerException en programas de Java.
1. NullPointerException al llamar a un método de instancia
Cuando ejecutamos el programa anterior, lanza el siguiente mensaje de error de NullPointerException.
Obtenemos NullPointerException en la declaración t.foo("Hola");
porque “t” es nulo aquí.
2. Java NullPointerException al acceder/modificar un campo de un objeto nulo
El programa anterior lanza la siguiente traza de NullPointerException.
Se está lanzando NullPointerException en la declaración int i = t.x;
porque “t” es nulo aquí.
3. Java NullPointerException cuando se pasa null como argumento de método
Este es uno de los casos más comunes de java.lang.NullPointerException
porque es el llamador quien está pasando el argumento nulo.
La siguiente imagen muestra la excepción de puntero nulo cuando se ejecuta el programa anterior en Eclipse IDE.
4. java.lang.NullPointerException cuando se lanza null
A continuación se muestra la traza de la pila de excepciones del programa anterior, que muestra NullPointerException debido a la instrucción throw null;
.
5. NullPointerException al obtener la longitud de un array nulo
6. NullPointerException al acceder al valor del índice de un array nulo
7. Excepción de NullPointerException al sincronizar en un objeto nulo
La instrucción synchronized(mutex)
lanzará una NullPointerException porque el objeto “mutex” es nulo.
8. Estado HTTP 500 java.lang.NullPointerException
En ocasiones, obtenemos una respuesta de página de error desde una aplicación web Java con un mensaje de error que dice “Estado HTTP 500 – Error interno del servidor” y la causa principal es java.lang.NullPointerException
.
Para solucionar esto, edité el proyecto de ejemplo de Spring MVC y modifiqué el método HomeController de la siguiente manera.
La siguiente imagen muestra el mensaje de error generado por la respuesta de la aplicación web.
Aquí está la traza de la excepción:
La causa principal es una NullPointerException en la instrucción user.getUserId().toLowerCase()
porque user.getUserId()
devuelve nulo.
Cómo detectar java.lang.NullPointerException
La detección de NullPointerException es muy fácil, simplemente observa la traza de la excepción y te mostrará el nombre de la clase y el número de línea de la excepción. Luego, mira el código y ve qué podría ser nulo causando la NullPointerException. Simplemente mira todos los ejemplos anteriores, es muy claro desde la traza de la pila qué está causando la excepción de puntero nulo.
Cómo solucionar NullPointerException
java.lang.NullPointerException es una excepción no verificada, por lo que no tenemos que capturarla. Las excepciones de puntero nulo pueden prevenirse mediante comprobaciones nulas y técnicas de codificación preventiva. Mira los siguientes ejemplos de código que muestran cómo evitar java.lang.NullPointerException
.
Prácticas recomendadas de codificación para evitar NullPointerException
1. Consideremos la siguiente función y estemos atentos a escenarios que puedan causar una excepción de puntero nulo.
La NullPointerException puede ocurrir si se pasa el argumento como nulo. El mismo método puede escribirse de la siguiente manera para evitar la NullPointerException.
2. También podemos agregar una verificación de nulo para el argumento y lanzar IllegalArgumentException
si es necesario.
3. Podemos usar el operador ternario como se muestra en el siguiente ejemplo de código.
4. Use String.valueOf()
en lugar del método toString()
. Por ejemplo, revisa el código del método println() de PrintStream que está definido de la siguiente manera.
El fragmento de código a continuación muestra un ejemplo donde se utiliza el método valueOf() en lugar de toString().
5. Escribe métodos que devuelvan objetos vacíos en lugar de nulos siempre que sea posible, por ejemplo, lista vacía, cadena vacía, etc.
6. Hay algunos métodos definidos en las clases de colección para evitar NullPointerException, deberías usarlos. Por ejemplo, contains(), containsKey(), y containsValue().
Referencia: Documento de API
Source:
https://www.digitalocean.com/community/tutorials/java-lang-nullpointerexception