Escuché del maestro que la mayoría de las anormalidades en futuros estudios son excepciones de puntero nulo. Así que tómate un tiempo para jugar para verificar qué es una excepción de puntero nulo
1: Las principales razones de la aparición de excepciones de puntero nulo son las siguientes:
(1) Cuando un objeto no existe, generará una excepción obj.method () // El objeto obj no existe
(2) Al acceder o modificar un campo que no existe en un objeto, se generará una excepción obj.method () // El método no existe
(3) la variable de cadena no se inicializa;
(4) Los objetos de tipo de interfaz no se inicializan con clases específicas, como:
Lista lt; informará un error
List lt = new ArrayList (); No habrá error
Cuando el valor de un objeto está vacío, no juzga para estar vacío. Puede intentar agregar una línea de código antes del siguiente código:
if (rb! = null && rb! = "")
Cambio a:
if (rb == null); if (rb! == null && rb! = "") o if ((""). Equals (rb))Solución al puntero nulo:
Concéntrese en la línea donde ocurre el error y diagnostica errores específicos a través de dos razones principales causadas por la excepción de puntero nulo. Al mismo tiempo, para evitar la ocurrencia de punteros nulos, es mejor colocar valores "nulos" o nulos antes del valor establecido al hacer un procesamiento de juicio.
Un breve análisis de las excepciones comunes de puntero nulo:
(1) error de puntero nulo java.lang.nullpointerexception
Hay 8 tipos de datos básicos en Java. Los valores de las variables pueden tener sus valores predeterminados. Si se agregan sin una asignación normal, la máquina virtual Java no se puede compilar correctamente. Por lo tanto, el uso de tipos básicos de datos de Java generalmente no causará excepciones de puntero nulo. En el desarrollo real, la mayoría de las excepciones de puntero nulo están relacionadas principalmente con las operaciones de objetos.
2. Mecanismo de manejo de excepciones de Java
Hay dos formas de lidiar con el código que puede tener excepciones:
Primero, use la declaración de prueba ... Catch en el método para atrapar y manejar excepciones. La declaración de caché puede tener múltiples que coincidan con múltiples excepciones. Por ejemplo:
public void p (int x) {try {...} capt (excepción e) {...} finalmente {...}} En segundo lugar, para las excepciones que no se pueden procesar o las que necesitan transformarse, pasarlo a la declaración del método.
La declaración de lanza lanza una excepción. Por ejemplo:
public void test1 () lanza myException {... if (....) {Throw New MyException ();}}Si cada método simplemente arroja una excepción, en una llamada anidada de múltiples capas al método de llamadas del método, la máquina virtual Java busca desde el bloque de código de método donde se produce la excepción hasta que se encuentra el bloque de código que maneja la excepción. Luego entregue la excepción a la declaración de captura correspondiente para el procesamiento. Si la máquina virtual Java se remonta al método main () en la parte inferior de la pila de llamadas de método, si el bloque de código que maneja la excepción aún no se encuentra, se manejarán los siguientes pasos:
Primero, llame al método printStackTrace () del objeto de excepción e imprima la información de excepción de la pila de llamadas de método.
En segundo lugar, si el hilo que ocurre la excepción es el hilo principal, todo el programa ejecutan; Si no es el hilo principal, el hilo termina y otros hilos continúan funcionando.
A través del análisis y el pensamiento, podemos ver que cuanto antes sea el procesamiento anormal, menores son los recursos y el tiempo consumidos, menor es el alcance del impacto. Por lo tanto, no arroje excepciones que pueda manejar a la persona que llama.
No se puede ignorar otro punto: finalmente, las declaraciones deben ejecutar código en cualquier caso, lo que puede garantizar la confiabilidad de algún código que debe ejecutarse en cualquier caso. Por ejemplo, cuando la consulta de la base de datos es anormal, la conexión JDBC debe liberarse, etc. La declaración finalmente se ejecuta antes de la declaración de devolución, independientemente de su orden o ubicación, o si hay una excepción en el bloque de try. La única situación en la que no se ejecuta la declaración finalmente es que el método ejecuta el método System.exit (). System.exit () funciona para terminar la máquina virtual Java que ejecuta actualmente. El valor de retorno de la devolución no se puede cambiar asignando un nuevo valor a la variable en el bloque de instrucción Finalmente. También se recomienda no usar la instrucción de retorno en el bloque Finalmente. No tiene sentido y puede conducir fácilmente a errores.
Finalmente, también debe prestar atención a las reglas de sintaxis para el manejo de excepciones:
Primero, las declaraciones de try no pueden existir solas, pero pueden estar compuestas de captura y finalmente
Intente ... atrapar ... finalmente, intente ... atrapar, intente ... finalmente, intente ... finalmente, las declaraciones de atrapar pueden tener una o más, y finalmente las declaraciones pueden ser como máximo una. Las tres palabras clave intentan, atrapan y finalmente no se pueden usar solo.
En segundo lugar, el alcance de las variables en los tres bloques de código es independiente y no se puede acceder entre sí. Si desea ser accesible en los tres bloques, debe definir la variable fuera de estos bloques.
En tercer lugar, cuando se usan múltiples bloques de captura, la máquina virtual Java coincide con una de las clases de excepción o su subclase, y ejecuta el bloque de captura sin ejecutar otros bloques de captura.
Cuarto, no hay otras declaraciones que sigan después de la declaración de lanzamiento porque no tienen la oportunidad de ser ejecutados.
Quinto, si un método llama a otro método que declara la excepción lanzada, entonces este método maneja la excepción o declara el lanzado.
2.2 Diferencia entre lanzar y lanzar palabras clave:
El lanzamiento se usa para lanzar una excepción, dentro del cuerpo del método. El formato de sintaxis es: lanzar objeto de excepción.
Los lanzamientos se usan para declarar qué excepción puede ser lanzada por un método. Después del nombre del método, el formato de sintaxis es:
Lanza la excepción tipo 1, excepción tipo 2 ... Tipo de excepción n.
Tres: Las siguientes enumeras varias situaciones y soluciones correspondientes donde pueden ocurrir excepciones de puntero nulo:
Fragmento de código 1:
out.println (request.getParameter ("UserName"));Análisis: La función del segmento de código 1 es muy simple, que es generar el valor del "nombre de usuario" de entrada del usuario.
Nota: Parece que la declaración anterior no puede encontrar ningún error de sintaxis, y en la mayoría de los casos, no hay problema. Sin embargo, si un usuario no proporciona el valor del campo de formulario "nombre de usuario" al ingresar datos, o omite el formulario directamente la entrada de alguna manera, el valor de esta solicitud .getParameter ("nombre de usuario") está vacío (tenga en cuenta que no es una cadena vacía, es un objeto vacío nulo. Excepción de "java.lang.nullpointerexception". Además, incluso si el objeto puede estar vacío, se llaman algunos métodos del objeto java.lang.object u objeto en sí mismo, como toString (), igual (obj obj) y otras operaciones.
Fragmento de código 2:
String UserName = request.getParameter ("UserName"); If (username.equals ("root")) {...}Análisis: La función del segmento de código 2 es detectar el nombre de usuario proporcionado por el usuario. Si se trata de un usuario cuyo nombre de usuario es "root", se realizarán algunas operaciones especiales.
Nota: En el segmento de código 2, si un usuario no proporciona el valor del campo de formulario "nombre de usuario", el nombre de usuario del objeto de cadena es un valor nulo y un objeto nulo no puede compararse directamente con otro objeto. Del mismo modo, la página JSP donde se encuentra Code Segment 2 lanzará un error de puntero vacío.
Un pequeño truco: si desea comparar el valor de retorno de un determinado método con una constante y poner la constante frente a él, puede evitar llamar al método igual del objeto nulo. Por ejemplo:
If ("root" .equals (nombre de usuario)) {...}Incluso si el objeto de nombre de usuario devuelve un objeto nulo, no habrá excepciones de puntero nulo aquí y puede ejecutarse como de costumbre.
Fragmento 3:
String username = session.getAttribute ("session.Username"). ToString ();Análisis: La función del segmento de código 3 es eliminar el valor de session.username en la sesión y asignar el valor al nombre de usuario del objeto de cadena.
Nota: En general, si el usuario ya ha tenido una sesión, no se producirá ningún problema; Sin embargo, si el servidor de aplicaciones se reinicia en este momento y el usuario no ha vuelto a iniciar sesión (también puede ser que el usuario cierre el navegador pero aún abre la página original). Luego, el valor de la sesión no será válido en este momento, causando que el valor de la sesión. Nombre de uso en la sesión esté vacío. La ejecución directa de la operación ToString () en un objeto con NULL hará que el sistema arroje una excepción de puntero nulo.
Fragmento 4:
public static void main (string args []) {persona p = null; P.SetName ("Zhang San"); System.out.println (p.getName ()); }Análisis: declare un objeto de persona e imprima el nombre del nombre en el objeto.
Nota: En este momento, su P tendrá una excepción de puntero nulo, porque acabas de declarar que este objeto de tipo de persona no creó un objeto, por lo que no hay referencia de dirección en su montón. No necesariamente cree un objeto al usar el objeto y usar el método.
R: Comience a usarlo directamente independientemente de si el objeto está vacío o no.
(JSP) segmento de código 1:
out.println (request.getParameter ("UserName"));Análisis: La función del segmento de código 1 es muy simple, que es generar el valor del "nombre de usuario" de entrada del usuario.
Nota: Parece que la declaración anterior no puede encontrar ningún error de sintaxis, y en la mayoría de los casos, no hay problema. Sin embargo, si un usuario no proporciona el valor del campo de formulario "nombre de usuario" al ingresar datos, o omite el formulario directamente la entrada de alguna manera, el valor de esta solicitud .getParameter ("nombre de usuario") está vacío (tenga en cuenta que no es una cadena vacía, es un objeto vacío nulo. Excepción de "java.lang.nullpointerexception". Además, incluso si el objeto puede estar vacío, se llaman algunos métodos del objeto java.lang.object u objeto en sí mismo, como toString (), igual (obj obj) y otras operaciones.
(JSP) Fragmento 2:
String UserName = request.getParameter ("UserName"); If (username.equals ("root")) {...}Análisis: La función del segmento de código 2 es detectar el nombre de usuario proporcionado por el usuario. Si se trata de un usuario cuyo nombre de usuario es "root", se realizarán algunas operaciones especiales.
Nota: En el segmento de código 2, si un usuario no proporciona el valor del campo de formulario "nombre de usuario", el nombre de usuario del objeto de cadena es un valor nulo y un objeto nulo no puede compararse directamente con otro objeto. Del mismo modo, la página JSP donde se encuentra el segmento 2 de código 2 lanzará un error de puntero NULL (java.lang.nullpointerException).
(JSP) Fragmento 3:
String username = session.getAttribute ("session.Username"). ToString ();Análisis: La función del segmento de código 3 es eliminar el valor de session.username en la sesión y asignar el valor al nombre de usuario del objeto de cadena.
Nota: En general, si el usuario ya ha tenido una sesión, no se producirá ningún problema; Sin embargo, si el servidor de aplicaciones se reinicia en este momento y el usuario no ha vuelto a iniciar sesión (también puede ser que el usuario cierre el navegador pero aún abre la página original). Luego, el valor de la sesión no será válido en este momento, causando que el valor de la sesión. Nombre de uso en la sesión esté vacío. La ejecución directa de la operación ToString () en un objeto que es nulo hará que el sistema arroje una excepción de puntero (java.lang.nullpointerexception).
Lo anterior es el contenido completo de la breve discusión sobre el manejo de excepciones de Java de las excepciones de puntero nulo que el editor le presenta. Espero que todos apoyen a Wulin.com más ~