En este tutorial, aprenderemos sobre la declaración try catch en Java con la ayuda de ejemplos.
El try… catch
bloque en Java se usa para manejar excepciones y evita la terminación anormal del programa.
Aquí está la sintaxis de un try… catch
bloque en Java.
try( // code ) catch(exception) ( // code )
El try
bloque incluye el código que podría generar una excepción.
El catch
bloque incluye el código que se ejecuta cuando ocurre una excepción dentro del try
bloque.
Ejemplo: Java try … catch block
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Salida
ArithmeticException => / por cero
En el ejemplo anterior, observe la línea,
int divideByZero = 5 / 0;
Aquí, estamos tratando de dividir un número por cero . En este caso, ocurre una excepción. Por lo tanto, hemos incluido este código dentro del try
bloque.
Cuando el programa encuentra este código, ArithmeticException
ocurre. Y la excepción es capturada por el catch
bloque y ejecuta el código dentro del catch
bloque.
El catch
bloque solo se ejecuta si existe una excepción dentro del try
bloque.
Nota : En Java, podemos usar un try
bloque sin un catch
bloque. Sin embargo, no podemos usar un catch
bloque sin un try
bloque.
Prueba de Java … finalmente bloquear
También podemos usar el try
bloque junto con un bloque finalmente.
En este caso, el bloque.
Ejemplo: prueba de Java … finalmente bloquear
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Salida
Finalmente, el bloque siempre se ejecuta Excepción en el hilo "main" java.lang.ArithmeticException: / por cero en Main.main (Main.java:4)
En el ejemplo anterior, hemos utilizado el try
bloque junto con el finally
bloque. Podemos ver que el código dentro del try
bloque está provocando una excepción.
Sin embargo, el código dentro del finally
bloque se ejecuta independientemente de la excepción.
Java prueba … captura … finalmente bloquea
En Java, también podemos usar el bloque finalmente después del try… catch
bloque. Por ejemplo,
import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Salida
Ingreso de declaración de prueba Excepción => Índice 5 fuera de límites para la longitud 5 Cierre de PrintWriter
En el ejemplo anterior, hemos creado una matriz llamada lista y un archivo llamado salida.txt. Aquí, estamos tratando de leer datos de la matriz y almacenarlos en el archivo.
Fíjate en el código
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Aquí, el tamaño de la matriz es 5
y el último elemento de la matriz está en list(4)
. Sin embargo, estamos intentando acceder a elementos en a(5)
y a(6)
.
Por lo tanto, el código genera una excepción que es capturada por el bloque catch.
Dado que el finally
bloque siempre se ejecuta, hemos incluido código para cerrar el PrintWriter
interior del bloque.
Es una buena práctica utilizar el bloqueo final para incluir un código de limpieza importante, como cerrar un archivo o una conexión.
Nota : hay algunos casos en los que un finally
bloque no se ejecuta:
- Uso del
System.exit()
método - Se produce una excepción en el
finally
bloque - La muerte de un hilo
Múltiples bloques de captura
Para cada try
bloque, puede haber cero o más catch
bloques. Múltiples catch
bloques nos permiten manejar cada excepción de manera diferente.
El tipo de argumento de cada catch
bloque indica el tipo de excepción que puede manejar. Por ejemplo,
class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Salida
IndexOutOfBoundsException => Índice 10 fuera de límites para longitud 10
En este ejemplo, hemos creado una matriz de enteros arr
de tamaño 10 .
Dado que el índice de la matriz comienza en 0 , el último elemento de la matriz está en arr(9)
. Note la declaración,
arr(10) = 11;
Aquí, estamos tratando de asignar un valor al índice 10 . Por lo tanto, IndexOutOfBoundException
ocurre.
Cuando ocurre una excepción en el try
bloque,
- La excepción se lanza al primer
catch
bloque. El primercatch
bloque no maneja unIndexOutOfBoundsException
, por lo que se pasa al siguientecatch
bloque. - El segundo
catch
bloque del ejemplo anterior es el manejador de excepciones apropiado porque maneja unIndexOutOfBoundsException
. Por tanto, se ejecuta.
Captura de múltiples excepciones
Desde Java SE 7 y versiones posteriores, ahora podemos detectar más de un tipo de excepción con un catch
bloque.
Esto reduce la duplicación de código y aumenta la simplicidad y la eficiencia del código.
Cada tipo de excepción que puede manejar el catch
bloque se separa mediante una barra vertical |
.
Su sintaxis es:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
Para obtener más información, visite Java para detectar múltiples excepciones.
Declaración de Java try-with-resources
La declaración try-with-resources es una declaración try que tiene una o más declaraciones de recursos.
Su sintaxis es:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
El recurso es un objeto que se cerrará al final del programa. Debe declararse e inicializarse en la declaración try.
Pongamos un ejemplo.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
La declaración try-with-resources también se conoce como gestión automática de recursos . Esta declaración cierra automáticamente todos los recursos al final de la declaración.
Para obtener más información, visite la declaración java try-with-resources.