Y en la lección de hoy, vamos a aprender acerca de las excepciones. ¿Qué son las excepciones? Bueno, son eventos excepcionales. Es un evento que ocurre durante la ejecución de un programa. Y lo que hace es interrumpir el flujo normal de las instrucciones del programa. Y cuando este error ocurre dentro de un método, el método crea un objeto, y lo pasa al sistema de tiempo de ejecución. Ese objeto, que se llama objeto de excepción, contiene información sobre el error, incluyendo el tipo y el estado del programa cuando ocurrió el error. creando un objeto de excepción y manejándolo al sistema de tiempo de ejecución, se conoce como lanzar la excepción. En los viejos dias, el programa produciría un volcado del sistema de su memoria. Ahora, después de que un método lanza una excepción, el sistema de tiempo de ejecución intenta encontrar algo para manejarlo. El conjunto de cosas posibles para manejar la excepción, es la lista ordenada de métodos que han sido llamados, para obtener el método donde ocurrió el error. ¿Por qué usamos excepciones? Bueno, lo que queremos hacer es separar el código de manejo de errores del código normal. Las excepciones nos permiten separar los detalles de qué hacer cuando sucede algo fuera de lo común, y separamos eso de la lógica principal de un programa. Hace que nuestro código sea mucho más fácil de leer. Los tipos de excepciones incluyen, ¿qué sucede si el archivo estamos tratando de abrir, ¿no se puede abrir? ¿Qué sucede si no se puede determinar la longitud de un archivo? ¿Qué sucede si no hay suficiente memoria para asignar? ¿Qué sucede si una lectura falla? ¿Qué sucede si el archivo no se puede cerrar? Sin excepciones, tendríamos que mezclar el código de manejo de errores con el código que realmente funciona la lógica del programa. Entonces abrimos el archivo, si el archivo se abre, luego determinamos la longitud del archivo. Si la longitud del archivo es buena, entonces asignamos esa cantidad de memoria. Si tenemos suficiente memoria, entonces leemos el archivo. Como puede ver, hay mucha detección de errores dentro del código, que el código se vuelve largo, y difícil de seguir, con una serie de sentencias if anidadas. Cuando hay tantos errores al verificar dentro del código, perdemos la noción del flujo lógico del código, y hace que sea difícil de depurar, y entender exactamente lo que está haciendo el código. Podemos agrupar y diferenciar tipos de errores, y porque todas las excepciones lanzadas dentro de un programa son objetos, la agrupación se vuelve fácil, y es un resultado natural de la jerarquía de clases sobre la que Java se ha basado. Un método puede detectar una excepción en función de su grupo, o de tipo general, especificando alguna de las excepciones superclases en la instrucción catch. Y a continuación veremos la sentencia try catch. Pero los controladores de excepciones deben ser lo más específicos posible. Determinar el tipo de excepción, antes de decidir la mejor estrategia de recuperación. Al no detectar errores específicos, los manipuladores deben adaptarse a cualquier posibilidad. Y si tenemos controladores de excepciones que son demasiado generales, que puede hacer que el código sea más propenso a errores, capturando y manejando excepciones que no fueron previstos por el programador, y para eso no estaba destinado el manipulador. Una excepción es algún tipo de evento. Ocurre durante la ejecución del programa, y detiene el flujo normal del programa. Cuando ocurre el error, el método crea un objeto, y lo pasa al sistema de tiempo de ejecución. Hay muchas cosas que suceden detrás de escena, pero podemos manejar estas excepciones, y producir algún resultado que explique lo que sucede. Ahora, hay un montón de posibles excepciones diferentes, y podemos manejar cada uno de ellos, y lo que vamos a ver, es cómo manejar la excepción que sabemos que podría suceder. Las excepciones pueden separar los detalles de qué hacer cuando sucede algo fuera de lo común, y lo mantiene apartado de la lógica principal del programa. Y debido a que todas estas excepciones son objetos, podemos agruparlos o categorizarlos, para que tengan sentido. Cuando escribimos estas excepciones, Queremos ser lo más específicos posible. Y echemos un vistazo exactamente de lo que estoy hablando. Me desplazaré hacia abajo y aquí está nuestro programa. Es un programa simple, creo un entero, llamado dividir por cero, y lo puse igual a cero. Luego tengo un bloque try catch, comenzando en la línea 45. La idea aquí es que antes de dividir por cero, va a probar para ver si la división funcionará. Si hay una excepción aritmética, imprimirá la excepción aritmética, y un mensaje de lo que estaba tratando de hacer. Y luego un último bloque que dice: esto va a pasar pase lo que pase. Ejecutemos este programa y veamos qué sucede. Ahora la primera vez que lo ejecuto, lo tengo funcionando perfectamente, porque mi división por cero es cinco dividido por uno. Lo que pasa es que si cambio el uno por cero, y trato de dividir por cero, esta es la línea de código eso va a generar la excepción. El programa va a intentar hacer la división. Cuando ocurre la excepción, atrapa esa excepción aritmética, y luego imprime el mensaje. Ejecutémoslo y veamos qué sucede. Intentamos dividir por cero, cinco dividido por cero. El programa detectó nuestro error y dijo: la excepción aritmética por cero es el problema. Y finalmente, el bloque de código siempre se ejecuta, y la variable dividir por cero no se modificó. Lo que es importante saber aquí, es que el programa se completó con éxito, y la impresión es lo que necesita ser revisado para ver qué podría haber salido mal. Ahora ya sabe cómo se pueden manejar las excepciones antes de que causen un problema en su programa.