Enseñarle cómo lidiar con el manejo de excepciones durante el desarrollo de Java
Los primeros lenguajes de programación (como el lenguaje C) no tenían manejo de excepciones. Por lo general, devolvían un valor especial o establecían una bandera cuando encontraban un error, y lo usaban para determinar si se había producido un error. A medida que los sistemas continúan creciendo en tamaño, este manejo de errores se ha convertido en un obstáculo para la creación de grandes programas mantenibles.
Como resultado, han aparecido mecanismos de manejo de excepciones en algunos lenguajes, como la declaración de manejo de excepciones "on error goto" en Basic, mientras que Java ha establecido un nuevo mecanismo de manejo de excepciones basado en C++.
Java maneja excepciones a través de métodos orientados a objetos, clasifica varias excepciones y proporciona una buena interfaz. Este mecanismo proporciona un poderoso control sobre programas complejos. Al mismo tiempo, estos códigos de excepción están separados del código "normal", lo que mejora la legibilidad del programa y lo hace más flexible al escribirlo.
Clases de excepción en Java
En Java, cada excepción es un objeto, que es una instancia de la clase Throwable u otras subclases. Cuando ocurre una excepción en un método, se lanza un objeto de excepción. El objeto contiene información de excepción. El método que llama a este objeto puede detectar la excepción y manejarla.
La clase Throwable tiene dos subclases estándar: java.lang.Error y java.lang.Exception, es decir, errores y excepciones. Error: la clase de error generalmente se refiere a problemas relacionados con máquinas virtuales, como fallas del sistema, errores de máquinas virtuales, fallas de enlaces dinámicos, etc. Este tipo de error no se puede recuperar o no se puede capturar y provocará la interrupción de la aplicación.
Excepción: la clase Exception se refiere a algunas excepciones que se pueden capturar y posiblemente recuperar, como subíndice de matriz fuera de límites Array, Índice, OutOf, Bounds, Exception. Dividir un número por cero genera excepciones: ArithmeticException, excepciones de entrada/salida: IOException, etc.
Consejo: El compilador de Java requiere que los programas Java capturen o declaren todas las excepciones que no sean de tiempo de ejecución, como: FileNotFoundException, IOException, etc. Porque, para este tipo de excepción, si el programa no lo maneja, puede traer resultados inesperados. Sin embargo, no es necesario manejar las excepciones durante el tiempo de ejecución, porque dichas excepciones son muy comunes y todo manejo puede tener un impacto en la legibilidad y eficiencia operativa del programa.
Forma de manejo de excepciones de Java, el manejo de excepciones de Java se implementa a través de 5 palabras clave: try, catch, throw, throws y finalmente. Generalmente, try se usa para ejecutar un programa. Si ocurre una excepción, el sistema generará una excepción. En este momento, puede detectarla por su tipo o, finalmente, por el controlador predeterminado.
La siguiente es la forma básica del controlador de excepciones de Java: try //El bloque del programa durante la ejecución catch ExceptionType1e //El procesamiento de ExceptionType1 catch ExceptionType2e //El procesamiento de ExceptionType2 throw e //Lanza esto " excepción" "Finalmente intente bloquear y capturar la declaración: cuando se encuentra una declaración de prueba, el marco de "excepción" se coloca en la pila hasta que se completen todas las declaraciones en el bloque de prueba. Si la declaración try del siguiente nivel no maneja una determinada "excepción", la pila se expandirá hasta encontrar una declaración try que maneja esta "excepción". Después del programa de prueba, debe incluir una cláusula catch para especificar el tipo de "excepción" que desea detectar. Consejo: El primer paso para detectar excepciones es usar try... para seleccionar el alcance de la excepción que desea detectar. Cuando se ejecute, el código entre paréntesis generará un objeto de excepción y se generará. Luego puedes usar bloques catch para manejar excepciones. declaración de lanzamiento y declaración de lanzamiento: la declaración de lanzamiento se utiliza para lanzar explícitamente una "excepción".
Primero, debe obtener un identificador de instancia generado por la clase Throwable u otra subclase, pasarlo a la cláusula catch a través de parámetros o usar la nueva declaración para crear una instancia. La siguiente es la forma habitual de la declaración de lanzamiento: throw ThrowableInstance. Consejo: después de ejecutar la declaración de lanzamiento, el proceso en ejecución se detendrá inmediatamente y también se suspenderá la ejecución de la siguiente declaración de lanzamiento. El nuevo operador aquí se utiliza para crear una instancia de la clase Throwable, que se explicará en detalle más adelante en el artículo sobre programación orientada a objetos. La declaración throws se utiliza para indicar varias "excepciones" que una función miembro puede generar. Para la mayoría de las subclases de excepción, el compilador de Java le obliga a declarar el tipo de "excepción" lanzada en una función miembro. Esta regla no tiene efecto si el tipo de "excepción" es Error o RuntimeException, o una de sus subclases. Si desea lanzar explícitamente una RuntimeException, debe declarar su tipo mediante la declaración throws. Consejo: Por supuesto, es posible que no comprenda muy bien las instrucciones anteriores, pero no importa. Compile y ejecute el siguiente programa Java (se han hecho comentarios detallados para usted) y comprenderá muchas cosas. rutina para ilustrar el problema: clase ThrowsDemo //Nombre de clase, el archivo fuente de Java correspondiente debe guardarse como: ThrowsDemo.javastatic void procedimiento throws IllegalAccessException //lanza declaración //Lanza una excepción de tipo IllegalAccessException System.out.println ″ dentro del procedimiento ″ //Enviar información de texto a La explicación es que se lanzó una excepción al ejecutar el método de procedimiento throw new IllegalAccessException "demo" //Se genera una nueva instancia de clase Throwable y luego se lanza una excepción public static void main String args // El método principal se inicia y el programa se ejecuta desde aquí try //try El bloque de declaración inicia el procedimiento //Llama al método de procedimiento, que arrojará (arrojará) información de excepción catch IllegalAccessException e //Maneja excepciones del tipo IllegalAccessException, captura el bloque de declaración System .out.println ″caught″ + e programación y ejecución del programa. El proceso es el siguiente: E \javacode\exception>java ThrowsDemoinside procedimientocaught java.lang.IllegalAccessException consejo de demostración: Como se muestra en el código anterior, hemos utilizado un Programa completo para ilustrar cómo utilizar try...catch...throw y otras declaraciones en programas Java. La excepción generada en Try... se detecta y luego se procesa en el bloque catch (aquí solo se genera la información de la excepción). throws IllegalAccessException indica que el programa generará una excepción de tipo IllegalAccessException. IllegalAccessExceptione genera un objeto de excepción y luego usa System.out.println para generar la información de la excepción. Declaración finalmente, a veces para garantizar que un fragmento de código se ejecute sin importar qué excepción ocurra, puede usar la palabra clave finalmente para marcar dicho fragmento de código. Una función miembro regresa a la función miembro que la llamó, ya sea a través de una excepción no detectada o mediante una declaración de retorno explícita. La cláusula finalmente siempre se ejecuta justo antes de que regrese la función miembro.
A continuación utilizamos un programa de manejo de excepciones relativamente completo para ilustrar el uso de varias declaraciones de manejo de excepciones mencionadas anteriormente: class ExceptionDemo //Ejemplo de uso de excepción, guardar como ExceptionDemo.javastatic void procA try System.out.println ″dentro de procA″ throw new RuntimeException ″ demo″ // Lanzar una excepción finalmente System.out.println ″procA finalmente″ //Nota: ¡Pase lo que pase, se ejecutará static void procB try System.out.println ″dentro de procB″ return //Return , de hecho, finalmente se devuelve después de ejecutar la instrucción finalmente System.out.println ″procB'sfinally″ public static void main String args try procA catch Exception y System.out.println ″catch ″+e procB request: En lo anterior completo. En el programa, el código dentro de las llaves después de finalmente se ejecutará bajo cualquier circunstancia. Además, en procB, la declaración de devolución no regresa inmediatamente, a lo que se debe prestar especial atención. Puede probarlo usted mismo ejecutando el programa anterior (la compilación y ejecución son similares al ejemplo anterior). Hasta ahora, hemos terminado de hablar por completo sobre el control de procesos de Java. Se necesita mucha práctica para comprenderlos y dominarlos verdaderamente. La buena manera es modificar cada uno de los programas anteriores para permitirles lograr las funciones que desea y, básicamente, comprender el control de procesos de Java. Para escribir bien programas Java, es muy importante estar familiarizado con el control de procesos y el manejo de excepciones de Java.