octubre 22, 2020

Tiendas Informatica

Notícias de Informatica y Tecnología

Resolver la excepción de puntero nulo en Java

Excepción de puntero nulo Java

Si bien Java es uno de los lenguajes de programación más solicitados y utilizados en el mundo, no está exento de detractores. Java no es un lenguaje particularmente apto para principiantes y está plagado de reglas y estructuras rígidas que pueden ser difíciles de entender. Luego está la NullPointerException.

La excepción de puntero nulo es una “excepción” (error) que es particularmente común cuando se programa en Java. Para un principiante, este es un mensaje confuso y abrumador de recibir, pero puede ser un dolor de cabeza para los profesionales. De hecho, las excepciones de puntero nulo son tan comunes y tan condenatorias que se las conoce como “el error de los mil millones de dólares”. ¡Ay!

En esta publicación, vamos a desenvolver la frase para descubrir exactamente qué significa y qué debe hacer cuando encuentre una excepción de puntero nulo en su propio código.

¿Qué significa la excepción de puntero nulo?

Primero, necesitamos entender con precisión qué se entiende por puntero y cómo puede ser nulo.

Para hacer esto, es útil recordar que una variable es en realidad un “puntero” que le dice a la computadora que mire en una ubicación determinada. Esa ubicación contendrá un valor, que es el valor de la variable dada.

Entonces, si decimos “int x = 3”, entonces la computadora elegirá una ubicación para llamar “x” y almacenará el valor “3” allí. Siempre que se refiera a x más adelante en su código, la computadora buscará en esa ubicación y verá que es un “3” (a menos que lo haya cambiado). La variable puntos la computadora al destino correcto.

Por eso es útil conocer primero el tamaño potencial de una variable, ya que le dice a la computadora cuánto espacio debe asignar para ese valor.

Pero, ¿qué sucede cuando tienes un puntero que no apunta a ninguna parte? Ahí es donde entra la excepción del puntero nulo.

Objetos y referencias

Un número entero como “x” es lo que llamamos un “tipo primitivo”. Eso significa que es un valor fundamental.

Un objeto, por otro lado, es una estructura de datos más compleja que puede tener múltiples valores y métodos. Sin embargo, al igual que los tipos primitivos, aún deben almacenarse en algún lugar y aún necesitan una dirección y un puntero.

Un ejemplo es String. Este no es un tipo primitivo en Java, sino más bien un tipo de referencia: en este caso, “apunta” a una clase que puede tener múltiples valores y métodos. Una vez que haya inicializado una instancia de una cadena, puede hacer cosas como:

myString.length();

Esto le dirá cuánto tiempo tiene dicha cadena utilizando el método que pertenece a esa clase. Pero esto es también lo que hace posible la excepción de puntero nulo porque “length ()” es un valor que se refiere a una instancia específica de un objeto. Eso significa que actúa sobre una cadena específica. una vez ha sido creado.

Por lo tanto, debes decir:

String myString = “Hello”;
myString.length();

Pero si dijeras:

String myString = null;
myString.length();

Habrías creado un puntero (myString) pero ese puntero no apunta a ninguna parte, no sabe dónde buscar. ¿Otra forma de decir esto? El puntero es nulo.

La clave para entender es que no es que no haya ningún valor, sino que la variable no apunta a ninguna parte para ser un valor.

Hay ciertos patrones de diseño de codificación que se benefician de la capacidad de asignar valores nulos, por lo que es una característica útil en esas circunstancias. ¡Siempre que recuerde que el objeto es nulo!

Cómo evitar excepciones de puntero nulo Java

La razón por la que las excepciones de puntero nulo son tan impopulares en Java es que son excepciones en tiempo de ejecución. Eso significa que la aplicación se compilará bien y solo escuchará sobre ellos cuando llegue a ese punto en el código. Por lo tanto, es posible que un puntero nulo se deslice a través de la red si está inicializando muchos objetos sobre la marcha.

Por eso es útil incluir medidas para evitar excepciones de puntero nulo durante el tiempo de ejecución.

¿La forma más sencilla de hacer esto?

if (myString == null) {
                return;
                }

Esto le ayudará a comprobar rápidamente si un objeto es nulo, evitando así el código que generaría una excepción. También hay otros trucos que puedes usar. Por ejemplo, al comparar cadenas, es un buen movimiento invocar el método desde el literal de cadena, en lugar de al revés:

If(“Hello!”.equals(myString)) {

Más bien que:

If(myString.equals(“Hello!”)) {

Evitará lanzar una excepción de esta manera. O simplemente puede usar Kotlin, que es “seguro para nulos” por diseño.