Excepciones marcadas y no marcadas en Java
Este tutorial presenta qué son las excepciones marcadas y no marcadas en Java.
En Java, una excepción es una situación que ocurre durante la ejecución del código y finaliza la ejecución de forma anormal. Esta excepción puede ocurrir en tiempo de compilación o en tiempo de ejecución. Java clasifica ampliamente la excepción en dos tipos, marcada y no marcada. La excepción, que es verificada por el compilador en tiempo de compilación, se conoce como una excepción verificada. Mientras tanto, una excepción que se comprueba en tiempo de ejecución se denomina excepción no comprobada.
Para hacer frente a las excepciones, Java proporciona clases para cada excepción, como NullPointerException
, ArrayIndexOutofBoundsException
, IOException
, etc. La clase Exception
está en la parte superior de todas las clases de excepción y cualquier cosa que sea una subclase de Exception
Excepto por RuntimeException
y sus subclases es una excepción marcada.
Las clases de excepción que heredan la RuntimeException
como ArithmeticException
, NullPointerException
y ArrayIndexOutOfBoundsException
se denominan excepciones no comprobadas. Estos se comprueban en tiempo de ejecución.
Excepciones comprobadas en Java
Primero entendamos qué es una excepción y cómo afecta la ejecución del código. En este ejemplo, estamos escribiendo datos en un archivo y este código es propenso a excepciones como FileNotFoundException
, IOException
, etc. No proporcionamos ningún controlador de captura y, dado que se trata de excepciones comprobadas, el compilador de Java sí no compila el código y lanza las excepciones en tiempo de compilación. Vea el ejemplo a continuación.
import java.io.FileOutputStream;
public class SimpleTesting {
public static void main(String[] args) {
FileOutputStream fout =
new FileOutputStream("/home/root/eclipse-workspace/java-project/myfile.txt");
fout.write(1256);
fout.close();
System.out.println("Data written successfully");
}
}
Producción :
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
Unhandled exception type FileNotFoundException
Unhandled exception type IOException
Unhandled exception type IOException
at SimpleTesting.main(SimpleTesting.java:8)
Para evitar cualquier terminación anormal del código, debemos proporcionar un controlador de captura para el código. A continuación se muestra el mismo código que el anterior, pero tiene un controlador de captura para que el código no termine en el medio y se ejecute correctamente. Vea el ejemplo a continuación.
import java.io.FileOutputStream;
public class SimpleTesting {
public static void main(String[] args) {
try {
FileOutputStream fout =
new FileOutputStream("/home/irfan/eclipse-workspace/ddddd/myfile.txt");
fout.write(1256);
fout.close();
System.out.println("Data written successfully");
} catch (Exception e) {
System.out.println(e);
}
}
}
Producción :
Data written successfully
Excepción sin marcar en Java
El siguiente código arroja ArrayIndexOutOfBoundsException
, que es una excepción sin marcar. Este código se compila correctamente pero no se ejecuta porque estamos accediendo a elementos fuera del rango del array; por lo tanto, el código lanza una excepción de tiempo de ejecución. Vea el ejemplo a continuación.
public class SimpleTesting {
public static void main(String[] args) {
int[] arr = {3, 5, 4, 2, 3};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
System.out.println(arr[23]);
}
}
Producción :
3
5
4
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 23 out of bounds for length 5
at SimpleTesting.main(SimpleTesting.java:9)
Artículo relacionado - Java Exception
- Arreglar Java.Net.SocketException: error de tubería rota en Java
- Clase de excepción Java Throwable VS
- Comprender la excepción de tiempo de ejecución en Java
- Corrija la excepción Java.Net.BindException: la dirección ya está en uso: Bind
- El proceso de Java Gateway se cerró antes de enviar su número de puerto
- Excepción de entrada no válida en Java