Java try ... catch (com exemplos)

Neste tutorial, aprenderemos sobre a instrução try catch em Java com a ajuda de exemplos.

O try… catchbloco em Java é usado para lidar com exceções e evitar o encerramento anormal do programa.

Aqui está a sintaxe de um try… catchbloco em Java.

 try( // code ) catch(exception) ( // code )

O trybloco inclui o código que pode gerar uma exceção.

O catchbloco inclui o código que é executado quando ocorre uma exceção dentro do trybloco.

Exemplo: 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()); ) ) )

Resultado

 ArithmeticException => / por zero

No exemplo acima, observe a linha,

 int divideByZero = 5 / 0;

Aqui, estamos tentando dividir um número por zero . Nesse caso, ocorre uma exceção. Portanto, colocamos esse código dentro do trybloco.

Quando o programa encontra esse código, ArithmeticExceptionocorre. E, a exceção é capturada pelo catchbloco e executa o código dentro do catchbloco.

O catchbloco só é executado se houver uma exceção dentro do trybloco.

Nota : Em Java, podemos usar um trybloco sem um catchbloco. No entanto, não podemos usar um catchbloco sem um trybloco.

Java tente … finalmente bloquear

Também podemos usar o trybloco junto com um bloco finally.

Nesse caso, o bloco finally é sempre executado, haja ou não uma exceção dentro do bloco try.

Exemplo: Java try … finally block

 class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )

Resultado

 Finalmente, o bloco é sempre executado Exception no thread "main" java.lang.ArithmeticException: / por zero em Main.main (Main.java:4)

No exemplo acima, usamos o trybloco junto com o finallybloco. Podemos ver que o código dentro do trybloco está causando uma exceção.

No entanto, o código dentro do finallybloco é executado independentemente da exceção.

Java tente … pegar … finalmente bloquear

Em Java, também podemos usar o bloco finally após o try… catchbloco. Por exemplo,

 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(); ) )

Resultado

 Inserindo a instrução try Exception => Índice 5 fora dos limites para o comprimento 5 Fechando PrintWriter

No exemplo acima, criamos um array denominado list e um arquivo denominado output.txt. Aqui, estamos tentando ler os dados do array e armazená-los no arquivo.

Observe o código,

 for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )

Aqui, o tamanho da matriz é 5e o último elemento da matriz é list(4). No entanto, estamos tentando acessar elementos em a(5) e a(6).

Conseqüentemente, o código gera uma exceção que é capturada pelo bloco catch.

Como o finallybloco é sempre executado, incluímos código para fechar o PrintWriterbloco de dentro.

É uma boa prática usar o bloco finally para incluir código de limpeza importante, como fechar um arquivo ou conexão.

Nota : Existem alguns casos em que um finallybloco não é executado:

  • Uso de System.exit()método
  • Uma exceção ocorre no finallybloco
  • A morte de um fio

Vários blocos Catch

Para cada trybloco, pode haver zero ou mais catchblocos. Vários catchblocos nos permitem tratar cada exceção de maneira diferente.

O tipo de argumento de cada catchbloco indica o tipo de exceção que pode ser tratada por ele. Por exemplo,

 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(); ) )

Resultado

 IndexOutOfBoundsException => Índice 10 fora dos limites para comprimento 10

Neste exemplo, criamos uma matriz de inteiros chamada arrde tamanho 10 .

Como o índice da matriz começa em 0 , o último elemento da matriz está em arr(9). Observe a declaração,

 arr(10) = 11;

Aqui, estamos tentando atribuir um valor ao índice 10 . Portanto, IndexOutOfBoundExceptionocorre.

Quando ocorre uma exceção no trybloco,

  • The exception is thrown to the first catch block. The first catch block does not handle an IndexOutOfBoundsException, so it is passed to the next catch block.
  • The second catch block in the above example is the appropriate exception handler because it handles an IndexOutOfBoundsException. Hence, it is executed.

Catching Multiple Exceptions

From Java SE 7 and later, we can now catch more than one type of exception with one catch block.

This reduces code duplication and increases code simplicity and efficiency.

Each exception type that can be handled by the catch block is separated using a vertical bar |.

Its syntax is:

 try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )

To learn more, visit Java catching multiple exceptions.

Java try-with-resources statement

A instrução try-with-resources é uma instrução try que possui uma ou mais declarações de recursos.

Sua sintaxe é:

 try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )

O recurso é um objeto a ser encerrado ao final do programa. Deve ser declarado e inicializado na instrução try.

Vamos dar um exemplo.

 try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )

A instrução try-with-resources também é conhecida como gerenciamento automático de recursos . Esta instrução fecha automaticamente todos os recursos no final da instrução.

Para saber mais, visite a declaração java try-with-resources.

Artigos interessantes...