hay dos tipos de excepciones: excepción marcada y Excepción no marcada. En esta guía, los discutiremos. La principal diferencia entre lo facturado y sin excepción es que las excepciones comprobadas se comprueban en tiempo de compilación, mientras desactivada excepciones se comprueba en tiempo de ejecución.
¿qué son las excepciones marcadas?
Las excepciones marcadas se comprueban en tiempo de compilación., Significa que si un método está lanzando una excepción marcada, entonces debería manejar la excepción usando el bloque try-catch o debería declarar la excepción usando la palabra clave throws, de lo contrario el programa dará un error de compilación.
vamos a entender esto con la ayuda de un ejemplo:
ejemplo de excepción marcada
en este ejemplo estamos leyendo el archivo myfile.txt
y mostrando su contenido en la pantalla. En este programa hay tres lugares donde se lanza una excepción marcada como se menciona en los comentarios a continuación., FileInputStream que se utiliza para especificar la ruta y el nombre del archivo, lanza FileNotFoundException
. El método read () que lee el contenido del archivo lanza IOException
y el método close () que cierra el flujo de entrada del archivo también lanza IOException
.
Resultado:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Unhandled exception type FileNotFoundExceptionUnhandled exception type IOExceptionUnhandled exception type IOException
¿por Qué este error de compilación? Como mencioné al principio, las excepciones Verificadas se comprueban durante el tiempo de compilación. Como no manejamos / declaramos las excepciones, nuestro programa dio el error de compilación.
¿Cómo resolver el error?, Hay dos maneras de evitar este error. Veremos ambos caminos uno por uno.
Método 1: Declare la excepción usando la palabra clave throws.como sabemos, las tres ocurrencias de excepciones Verificadas están dentro del método main (), así que una forma de evitar el error de compilación es: declarar la excepción en el método usando la palabra clave throws. Usted puede estar pensando que nuestro código está lanzando FileNotFoundException y IOException tanto entonces por qué estamos declarando la IOException solo. La razón es que IOException es una clase padre de FileNotFoundException por lo que por defecto cubre eso., Si quieres puedes declararlos así public static void main(String args) throws IOException, FileNotFoundException
.
salida: el contenido del archivo se muestra en la pantalla.
Método 2: manejarlos usando bloques try-catch.
el enfoque que hemos utilizado anteriormente no es bueno en absoluto. No es la mejor práctica de manejo de excepciones. Debe dar un mensaje significativo para cada tipo de excepción para que sea fácil para alguien entender el error. El código debe ser así:
este código se ejecutará bien y mostrará el contenido del archivo.,
Aquí están el resto de las pocas Excepciones comprobadas –
SQLException
IOException
ClassNotFoundException
InvocationTargetException
¿Qué se quedan sin excepciones?
las excepciones no marcadas no se comprueban en tiempo de compilación. Significa que si su programa está lanzando una excepción sin marcar e incluso si no manejó / declaró esa excepción, el programa no dará un error de compilación. La mayoría de las veces, esta excepción ocurre debido a los datos incorrectos proporcionados por el usuario durante la interacción Usuario-programa., Depende del programador juzgar las condiciones de antemano, que pueden causar tales excepciones y manejarlas apropiadamente. Todas las excepciones no marcadas son subclases directas de la clase RuntimeException.
vamos a entender esto con un ejemplo:
unchecked Exception Example
si compila este código, se compilará correctamente sin embargo, cuando lo ejecute, lanzará ArithmeticException
. Esto muestra claramente que las excepciones no marcadas no se comprueban en tiempo de compilación, sino que ocurren en tiempo de ejecución. Veamos otro ejemplo.,
este código también se compilaría correctamente ya que ArrayIndexOutOfBoundsException
también es una excepción sin marcar.nota: esto no significa que el compilador no esté comprobando estas excepciones por lo que no deberíamos manejarlas. De hecho, deberíamos manejarlos con más cuidado. Por ejemplo, en el ejemplo anterior debe haber un mensaje de excepción al usuario que está tratando de mostrar un valor que no existe en la matriz para que el usuario pueda corregir el problema.,
Output:
The specified index does not exist in array. Please correct the error.
Here are the few unchecked exception classes:
NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
IllegalArgumentException
NumberFormatException