Tecnología

Inicio

¿Qué es una excepción de puntero nulo?

¿Qué es una excepción de puntero nulo?


Cada programador de Java, finalmente, escribe un programa que produce los "NullPointerExceptions \" \ mensaje de error. Es especialmente críptico para los que comienzan sus carreras de programación por aprendizaje de Java, que no expone a los programadores el concepto de un puntero.

punteros

Un puntero es un término informático para una variable que, en lugar de mantener un poco de información, tiene una dirección a donde esa información se puede encontrar en la memoria de un ordenador. Se puede imaginar la variable como un poste indicador que \ "puntos \" para los que la información se puede encontrar. En lenguajes como C ++, el programador tiene que tomar una decisión explícita acerca de si una determinada variable contendrá los datos directamente o se mantenga en su lugar un puntero a la información y esta decisión puede tener un profundo efecto en la eficiencia del programa. Por ejemplo, si una clase determinada tiene un par de megabytes de información que debe ser transmitida en una función, es mucho más eficiente para dar la función de un puntero de copiar toda la información directamente.

Java recambios programadores de este dilema y los errores que puede producir al ocultar los punteros del programador.

Nulo

Null es otro término especial en la informática. Se refiere a una variable que contiene, literalmente, no hay información. Hasta alguna información es asignado a él, se dice que es igual a null. Por ejemplo, en el siguiente código:

cadena s
IR
s = new String ();

Una vez finalizada la primera línea, \ "s \" es igual a null. Una vez finalizada la segunda línea, \ "s \" es igual a una cadena vacía.

Los punteros nulos

Aunque Java intenta ocultar los punteros del programador, hay un caso cuando no puede hacerlo. Todas las clases son en realidad punteros a ubicaciones de memoria donde los datos de la clase se pueden encontrar. Esto hace que sea más rápido cuando las clases se deben pasar dentro y fuera de funciones. Sin embargo, en el ejemplo anterior, después de que se ejecute la primera línea, un puntero se ha reservado para la \ "s \", pero no hay datos se ha creado. \ "S \" no tiene memoria reservada para ello, por lo que es un \ "puntero nulo. \"

Las excepciones de puntero nulo

Ahora que ya sabe lo que es un puntero nulo, considere las siguientes dos líneas de código:

S de la secuencia;
s.charAt (0); // Obtener el primer carácter de la cadena.

El código está pidiendo para el primer carácter de un objeto de cadena que simplemente no existe. En otras palabras, se está pidiendo lo imposible. Tan pronto como esto ocurre, Java se da cuenta del problema y lanza un \ "NullPointerException \" para que el usuario o el programador sabe que algo ha ido mal.

Ejemplo

La mayoría de los programadores de Java nunca cometer el error anterior: saben objetos como cuerdas deben inicializarse con el "nuevo \" orden \. Sin embargo, considera la siguiente función:

impresión public void (s String) {
System.out.println (s)
IR
}

Inicialmente, este código se ve bien: la función recibe una cadena de en otras partes del programa y lo imprime a la pantalla. Sin embargo, ¿qué pasa si la persona que ejecuta la función de enviado es una cadena que no se ha inicializado correctamente? Un NullPointerException sería arrojado.

Depuración y Prevención

El primer paso para prevenir NullPointerExceptions es asegurar que los nuevos objetos de clase siempre se inician correctamente. Sin embargo, nadie es perfecto, por lo que el segundo paso es entrar en el hábito de llevar a cabo la vigilancia de datos para las funciones. Los datos entrantes deben ser tratados siempre como no fiable, por lo que la siguiente modificación podría hacerse:

impresión pública booleano (s String) {
tratar {
System.out.println (s)
IR
return true; // Que el resto del programa conocen la operación fue un éxito.
} Catch (NullPointerException e) {
falso retorno; // Que el resto del programa conocen la operación ha fallado.
}
}

La ventaja de este enfoque proactivo es que el resto del programa se puede escribir para juzgar qué tan serio es el problema, en lugar de inmediato fallar y dar al usuario un mensaje de error feo y críptica.