Este artículo se centra en algunos conceptos de mecanismo de excepción en Java. El propósito de escribir este artículo es facilitarme recordar estas cosas después de mucho tiempo.
1. Mecanismo de excepción
1.1 El mecanismo de excepción se refiere a cómo el programa lo maneja cuando ocurre un error. Específicamente, el mecanismo de excepción proporciona un canal seguro para la salida del programa. Cuando se produce un error, el proceso de ejecución del programa cambia y el control del programa se transfiere al procesador de excepciones.
1.2 La forma tradicional de lidiar con las excepciones es que la función devuelve un resultado especial para indicar que ocurre una excepción (generalmente este resultado especial se conoce comúnmente como es), y el programa que llama a la función es responsable de verificar y analizar los resultados devueltos por la función. Esto tiene las siguientes desventajas: por ejemplo, si la función regresa -1, significa que se produce una excepción, pero si la función desea devolver el valor correcto de -1, se confundirá; La legibilidad se reduce y el código del programa se mezcla con el código que maneja la excepción; El programa que llama a la función analiza el error, que requiere que el programador del cliente tenga una comprensión profunda de las funciones de la biblioteca.
1.3 Proceso de manejo de excepciones
1.3.1 Cuando se encuentra un error, el método termina inmediatamente y no devuelve un valor; Al mismo tiempo, se lanza un objeto de excepción.
1.3.2 El programa que llama a este método no continuará ejecutándose, pero busca un controlador de excepción que pueda manejar la excepción y ejecute el código en él.
2 Clasificación de excepciones
2.1 Clasificación de excepciones
2.1.1 La estructura de herencia de las excepciones: la clase base es lanzable, los errores y las excepciones heredan lanzables, RuntimeException e ioException, etc., y el RuntimeException específico hereda RuntimeException.
2.1.2 Error y RuntimeException y sus subclases se convierten en excepciones sin control, y otras excepciones se convierten en excepciones.
2.2 Características de cada tipo de excepción
2.2.1 Sistema de error El sistema de clase de error describe errores internos y agotamiento de recursos en el sistema operativo Java. Las aplicaciones no deben arrojar objetos de este tipo (generalmente lanzados en máquinas virtuales). Si se produce dicho error, no hay nada más que se pueda hacer, excepto para tratar de hacer que el programa salga de manera segura. Por lo tanto, al diseñar la programación, debe prestar más atención al sistema de excepción.
2.2.2 Sistema de excepción El sistema de excepción incluye RuntimeException System y otros sistemas que no son de RuntimeException
2.2.2.1 RuntimeException El sistema RuntimeException incluye la conversión de tipo incorrecta, el acceso a la matriz fuera de los límites, los intentos de acceder a los punteros nulos, etc. El principio de manejar RuntimeException es: si se produce RuntimeException, debe ser el error de un programador. Por ejemplo, se pueden evitar las excepciones de acceso fuera de los límites de matriz controlando los subíndices de matriz y los límites de la matriz.
2.2.2.2 Otras excepciones (ioexception, etc.) como esta son generalmente errores externos, como tratar de leer datos desde el final del archivo, etc. Este no es un error del programa en sí, sino un error externo que ocurre en el entorno de la aplicación.
2.3 Diferencias de la clasificación de excepción de C ++
2.3.1 De hecho, el nombre de clase de RuntimeException en Java no es apropiado, porque cualquier excepción ocurre en tiempo de ejecución. (Los errores que ocurren durante la compilación no son excepciones. En otras palabras, las excepciones son resolver errores que ocurren durante la ejecución del programa).
2.3.2 Logic_Error en C ++ es equivalente a RuntimeException en Java, mientras que RunTime_Error es equivalente a excepciones de tipos no de RuntimeException en Java.
3. Cómo usar excepciones
3.1 Declarar método lanza excepción
3.1.1 Sintaxis: lanza (omitido)
3.1.2 ¿Por qué necesitamos declarar un método para lanzar una excepción? Si un método lanza una excepción es tan importante como el tipo de valor de retorno del método. Suponiendo que el método lanza una excepción, no declara que el método lanzará una excepción, entonces el programador del cliente puede llamar a este método sin escribir código para manejar la excepción. Luego, una vez que ocurre una excepción, no hay un controlador de excepción adecuado para resolver esta excepción.
3.1.3 ¿Por qué la excepción lanzada es necesariamente una excepción marcada? RuntimeException y error se pueden generar en cualquier código. No necesitan ser lanzados por el programador. Una vez que ocurre un error, la excepción correspondiente se lanzará automáticamente. El programador es lanzada por el programador, que se divide en dos situaciones: el programador del cliente llama a la función de la biblioteca que arroja la excepción (el programador de la biblioteca arroja la excepción de la biblioteca); El programador del cliente lanza la excepción por sí mismo usando la declaración de lanzamiento. Al encontrar un error, los programadores generalmente son impotentes; Al encontrar una RuntimeException, debe ser que hay un error lógico en el programa y el programa debe modificarse (equivalente a un método de depuración); Solo la excepción verificada es lo que les importa a los programadores, y el programa debe y solo debe lanzar o manejar la excepción verificada.
3.1.4 Nota: El método de subclase que cubre un cierto método de la clase principal no puede lanzar más excepciones que el método de la clase principal. Por lo tanto, a veces al diseñar el método de clase principal, se declararán excepciones, pero el código real para implementar el método no arroja excepciones. El propósito de esto es facilitar el método de subclase para sobrescribir el método de clase principal.
3.2 Cómo lanzar una excepción
3.2.1 Sintaxis: tirar (omitido)
3.2.2 ¿Qué excepción se lanza? Para un objeto de excepción, el tipo de objeto es realmente útil cuando la excepción es del tipo de objeto, y la excepción del objeto en sí no tiene sentido. Por ejemplo, si el tipo de objeto de excepción es ClassCastException, entonces este nombre de clase es la única información útil. Por lo tanto, al elegir qué excepción se lanzará, lo más importante es seleccionar el nombre de clase de la excepción que puede explicar claramente la situación de la excepción.
3.2.3 Por lo general, hay dos constructores para objetos de excepción: uno es un constructor sin parámetros; El otro es un constructor con una cadena, que se utilizará como una descripción adicional para este objeto de excepción además del nombre del tipo.
3.2.4 Cree su propia excepción: cuando ninguna de las excepciones incorporadas en Java no puede explicar claramente la situación de excepción, debe crear su propia excepción. Cabe señalar que lo único útil es la información del nombre del tipo, así que no gaste energía en el diseño de clases de excepción.
3.3 Excepciones de captura Si no se procesa una excepción, entonces para un programa de interfaz no gráfico, el programa se abortará y emitirá información de excepción; Para un programa de interfaz gráfica, la información de excepción también se emitirá, pero el programa no aborta, pero regresa al bucle de procesamiento de la interfaz de usuario.
3.3.1 Sintaxis: los módulos del controlador Try, Catch y Finalmente (omitidos) deben estar inmediatamente detrás del bloque Try. Si se lanza una excepción, el mecanismo de control de excepciones buscará el primer controlador cuyos parámetros coinciden con el tipo de excepción y luego ingrese la cláusula de captura y pensará que la excepción ha sido controlada. La búsqueda del controlador también se detendrá una vez que se termine la cláusula de captura.
3.3.1.1 Captura de excepciones múltiples (tenga en cuenta la sintaxis y el orden de captura) (omitido)
3.3.1.2 Proceso de manejo de uso y uso de finalmente (omitido)
3.3.2 ¿Qué hace el manejo de excepciones? Para Java, debido a la recolección de basura, el manejo de excepciones no requiere reciclaje de memoria. Sin embargo, todavía hay algunos recursos que los programadores necesitan recopilar, como archivos, conexiones de red e imágenes.
3.3.3 ¿Debería el método lanzar una excepción o atrapar una excepción en el método? Principio: atrapar y manejar excepciones que saben cómo manejar y pasar excepciones que no saben cómo manejar
3.3.4 Lanza una excepción de nuevo
3.3.4.1 ¿Por qué vuelvo a lanzar una excepción? En este nivel, solo se puede procesar una parte del contenido, y se debe completar parte de procesamiento en un entorno de nivel superior, por lo que se debe volver a lanzar una excepción. Esto permite que cada etapa del controlador de excepción maneje las excepciones que puede manejar.
3.3.4.2 El bloque de captura correspondiente al mismo bloque de try se ignorará, y la excepción lanzada entrará en un nivel superior.
4 otras preguntas sobre excepciones
4.1 Excepción de uso excesivo En primer lugar, es muy conveniente usar excepciones, por lo que los programadores generalmente ya no están dispuestos a escribir códigos para manejar errores, sino simplemente lanzar una excepción. Esto está mal. Para errores completamente conocidos, el código que maneja tales errores debe escribirse para aumentar la robustez del programa. Además, la eficiencia del mecanismo anormal es muy pobre.
4.2 Excepciones divisorias de errores ordinarios. Para errores ordinarios, los códigos que tratan tales errores deben escribirse para aumentar la robustez del programa. Se requieren excepciones solo para errores de tiempo de ejecución indeterminables y predichos externos.
4.3 Información contenida en objetos de excepción En términos generales, la única información útil para los objetos de excepción es la información de tipo. Pero cuando se usa un constructor de cadenas de excepción, esta cadena también se puede usar como información adicional. Llamar a los métodos getMessage (), toString () o printStackTrace () del objeto de excepción pueden obtener información adicional, nombre de clase e información de pila de llamadas respectivamente. Y este último contiene información que es un superconjunto de la primera.
Excepciones comúnmente utilizadas:
Operaciones no respaldadas por no soportadoperationException
IlegalargumentException parámetros ilegales
IndexOutofboundSexception Index Outbound
IlegalstateException Estado ilegal
Hay una cierta diferencia entre advertencias anormales y ordinarias. Cuando se produce una excepción en la aplicación, se interrumpirá el flujo normal de instrucción del programa de ejecución. Es decir, el código después de una excepción no se ejecutará correctamente. Incluso desencadena la operación de reversión de la base de datos.
En la plataforma de desarrollo Java, las excepciones incluyen excepciones predefinidas y excepciones personalizadas. Estos dos tipos de excepción se complementan entre sí. Como desarrollador de programas calificado, sea bueno para usar excepciones en aplicaciones. Esto puede mejorar la interactividad de la aplicación. Al mismo tiempo, también es un requisito previo para garantizar el funcionamiento normal de la aplicación. Por lo tanto, el manejo de excepciones es muy importante para desarrollar una aplicación excelente. Por esta razón, el autor cree que los desarrolladores de programas deben tener una comprensión profunda de las excepciones comunes en las aplicaciones Java. Solo cuando comprenda estas excepciones comunes puede manejar bien las excepciones personalizadas.
1. Tipos y causas de excepciones comunes.
Con respecto a las excepciones comunes en las aplicaciones de Java, el autor cree que los desarrolladores de programas deben comprenderlas desde dos aspectos. Primero, necesitamos saber qué excepciones comunes de aplicación Java hay, y segundo, necesitamos saber qué causas pueden causar esta excepción. Esto no solo requiere que los gerentes de programas presten atención a la acumulación en su trabajo diario, sino que también necesita recopilar información de otros canales si es necesario. El autor realizará un análisis sobre esto, con la esperanza de que sea de ayuda para todos los desarrolladores de programas.
1. SQLException: opere la clase de excepción de la base de datos.
La mayoría de las aplicaciones Java de hoy dependen de bases de datos para ejecutarse. Esta clase se activará si se produce un error cuando una aplicación Java se comunica con la base de datos. Al mismo tiempo, la información de error de la base de datos se mostrará al usuario a través de esta clase. En otras palabras, esta clase de excepción de la base de datos operativa es un puente para la transmisión de información de excepción entre la base de datos y el usuario. Por ejemplo, el usuario ahora inserta datos en el sistema y estipula que un cierto campo debe ser único en la base de datos. Cuando el usuario inserta datos, si el valor de este campo se repite con el registro existente, viola las restricciones de singularidad de la base de datos, y se publicará un mensaje de excepción de la base de datos. Es posible que esta información no sea visible para los usuarios porque ocurre a nivel de base de datos. En este momento, esta clase de excepción de la base de datos de operaciones capturará la información de excepción de la base de datos y pasará la información de excepción al primer plano. De esta manera, el usuario de la recepción puede analizar la causa del error en función de esta información de excepción. Este es el objetivo principal de esta clase de excepción de base de datos operativa. En las aplicaciones Java, esta clase se activará cuando todas las operaciones de la base de datos ocurran excepciones. Toda la información rápida de la aplicación Java en sí es a menudo demasiado general en este momento, solo que dice que hay un error en la interacción con la base de datos y que no tiene mucho valor de referencia. En este momento, la información rápida de la base de datos es más valiosa.
2. ClasscastException: excepción de conversión de tipo de datos.
En aplicaciones Java, a veces el tipo de datos debe convertirse. Esta conversión incluye conversiones mostradas y conversiones implícitas. Sin embargo, no importa cómo se convierta, debe cumplir con un requisito previo, a saber, la compatibilidad de los tipos de datos. Si este principio se viola durante el proceso de conversión de datos, se activará la excepción de conversión de tipo de datos. Por ejemplo, en las aplicaciones ahora, los desarrolladores deben convertir los datos de fecha de tipo de carácter en datos de tipo fecha que la base de datos puede aceptar. En este momento, solo necesitan controlarlo en la aplicación en primer plano, y generalmente no habrá problemas. Sin embargo, si la aplicación de primer plano carece de control relevante, como el usuario solo ingresa a la información de mes y día al ingresar a la fecha, pero no tiene la información del año. En este momento, aparecerá una excepción cuando la aplicación realice una conversión de tipo de datos. Según mi experiencia, las excepciones de conversión de tipo de datos causan más excepciones en el desarrollo de aplicaciones, y también son excepciones de nivel relativamente bajo. Porque en la mayoría de los casos, se puede realizar algunos controles forzados sobre los tipos de datos en la ventana de la aplicación. Es decir, antes de convertir el tipo de datos, se garantiza la compatibilidad del tipo de datos. En este caso, no será fácil causar excepciones de conversión de tipo de datos. Si en los campos que solo permiten tipos numéricos, es posible establecer caracteres que no sean valores numéricos que no se les permite ingresar. Aunque con el mecanismo de manejo de excepciones, la aplicación no se ejecutará incorrectamente. Sin embargo, en el desarrollo real, aún debemos prever tanto las causas de los errores y tratar de evitar anormalidades.
3. NumberFormateException: Excepción lanzada cuando una cadena se convierte en un tipo numérico.
Durante el proceso de conversión de tipo de datos, si se produce un problema que ocurre durante el proceso de conversión de caracteres a conversión numérica, se utiliza una excepción independiente en el programa Java, a saber, NumberFormateException. Por ejemplo, cuando los datos de tipo de carácter "123456" se convierten en datos numéricos, se permite. Sin embargo, si los datos de tipo de caracteres contienen caracteres no numéricos, como 123#56, aparecerá una excepción cuando se convierte en tipo numérico. El sistema captará esta excepción y la procesará.
Hay muchas clases de excepción comunes en aplicaciones Java. Si no se encuentra la excepción de clase correspondiente, no se permite acceder a algunas excepciones de clase, el archivo ha finalizado la excepción, el archivo no ha encontrado una excepción, el campo no ha encontrado excepción, etc. En general, los desarrolladores de sistemas pueden juzgar el tipo de excepción actual en función de este nombre de excepción. Aunque es bueno, un buen recuerdo no es tan bueno como una pluma mala. Cuando es necesario (especialmente cuando hay una excepción personalizada), el desarrollador del programa finalmente tiene una lista de excepciones en la mano. En este caso, si la aplicación descubre un problema durante la depuración o recibe una queja del usuario durante la operación, puede encontrar la causa de la excepción basada en el nombre de la excepción a tiempo. Esto permite que las excepciones se resuelvan en el menor tiempo y restaure el funcionamiento normal de la aplicación. Esta medida se ha utilizado durante muchos años y es muy efectiva.
2. Sugerencias prácticas para la gestión de excepciones.
Para las excepciones operativas de la base de datos, las aplicaciones Java solo proporcionan una clase de excepción. Por lo tanto, confiar únicamente en la información de error de las aplicaciones Java a menudo no puede ayudar al personal de la aplicación a eliminar las causas del error. Solo puede especificar si esta excepción es causada por un error de aplicación o un error de base de datos. Para especificar aún más la causa del problema, es mejor explicar la causa específica al definir excepciones a nivel de base de datos. Por ejemplo, la aplicación de primer plano puede llamar a las funciones o procedimientos de la base de datos. En este momento, hacer un buen trabajo en la función o proceso de la base de datos puede explicar la causa específica de una cierta excepción. Por ejemplo, al generar otra tabla basada en una determinada tabla básica, un cierto campo no puede estar vacío, etc. Después de explicar claramente esta información de excepción, si realmente encuentra excepciones similares, la operación de la clase de excepción de la base de datos revertirá la información de excepción de la base de datos al usuario delantero. Esto ayudará a los usuarios a encontrar la causa del problema y a corregirlo en el menor tiempo. Por supuesto, esto requiere coordinación entre los programadores de Java y los diseñadores de bases de datos.
En segundo lugar, debe tenerse en cuenta que las excepciones no son la norma. En otras palabras, la mayoría de las anormalidades pueden eliminarse a través de la prevención y prevención razonables de la premisa. Si está diseñado para operaciones de cuatro puntos, puede restringir la entrada de 0 valores en el campo EX Number en la ventana de aplicación en primer plano para eliminar posibles excepciones durante la operación de la aplicación. Sin embargo, esto a menudo requiere que los desarrolladores de aplicaciones tengan una rica experiencia laboral y tengan una lógica de pensamiento estricto. Aunque esto es difícil, el autor cree que los desarrolladores de programas aún deben trabajar duro a este respecto, en lugar de siempre dejar que los usuarios sean sus testimonios para permitir que los usuarios descubran errores de diseño en la aplicación. El autor cree que las excepciones pueden ser lanzadas solo cuando algunos factores que están realmente están fuera del control de los programadores. Si los desarrolladores de aplicaciones pueden conocer este error, pero aún así no le prestan atención ni toman medidas efectivas para evitar esta anormalidad, entonces el autor no lo permitirá.
ArithmeticException (excepción con divisor 0), bufferoverflowexception (excepción de desbordamiento de búfer), bufferundlowexception (excepción de subsflow de búfer), indexOutoFboundSexception (excepción salar), nullpointerException (nullpointerexception), vacía estacada (excepción de stack vacía), ilegalargumenta ilegalargumenta (excepción de parámetro ilegal ilegal), excepción),),), excepción de parámetro ilegal),), excepción de parámetro ilegal),), excepción de parámetro ilegal),), excepción de parámetro ilegal),), excepción de parámetro ilegal),), excepción de parámetro ilegal). NegativeRArraySizeException, nosuchelementException, SecurityException, SystemException, Und -DeClaredThowableException
1. Java.lang.nullpointerexception
La explicación de la excepción es "el programa encuentra un puntero nulo". En pocas palabras, significa llamar a un objeto no inicializado o un objeto que no existe, es decir, confundir la inicialización de la matriz con la inicialización de los elementos de la matriz. La inicialización de una matriz es asignar el espacio requerido a la matriz. Los elementos en la matriz inicializada no están instanciadas y todavía están vacías, por lo que cada elemento debe inicializarse (si desea llamarlo)
2. Java.lang.ClassNotFoundException
La explicación de la excepción es "la clase especificada no existe".
3. Java.lang.arithmeticexception
La explicación de esta excepción es la "excepción de operación matemática". Por ejemplo, si una operación como dividir por cero aparece en un programa, tal excepción ocurrirá.
4. Java.lang.arrayindexoUtofboundsexception
La explicación de la excepción es "los subíndices de matriz están fuera de los límites". La mayoría de los programas ahora tienen operaciones en matrices. Por lo tanto, al llamar a matrices, debe verificar cuidadosamente para ver si los subíndices que llama excede el rango de la matriz. En términos generales, no es fácil cometer tales errores llamando a las llamadas de visualización (es decir, directamente usando constantes a subíndice), sino implícitas (es decir, usar variables para representar subíndices) a menudo cometen errores. Hay otra situación en la que la longitud de la matriz definida en el programa está determinada por ciertos métodos específicos y no se declara de antemano. En este momento, es mejor verificar primero la longitud de la matriz para evitar esta excepción.
5. Java.lang.iLLEGALARGUNMEXCEPTION
La explicación de esta excepción es "el error de parámetro del método", como los tres valores en el método G.SetColor (int rojo, int verde, int azul). Si hay más de 255, esta excepción también ocurrirá. Por lo tanto, una vez que se encuentra esta excepción, lo que debemos hacer es verificar rápidamente si hay un error en el parámetro que pasa en la llamada de método.
6. Java.lang.illegalaccesexception
La explicación de esta excepción es "sin permiso de acceso". Esta excepción ocurrirá cuando la aplicación desee llamar a una clase, pero el método actual no tiene permisos de acceso a la clase. Al usar el paquete en el programa, debe prestar atención a esta excepción, excepción y Java
Gracias por leer, espero que pueda ayudarte. ¡Gracias por su apoyo para este sitio!