Neste tutorial, aprenderemos sobre a instrução try catch em Java com a ajuda de exemplos.
O try… catch
bloco em Java é usado para lidar com exceções e evitar o encerramento anormal do programa.
Aqui está a sintaxe de um try… catch
bloco em Java.
try( // code ) catch(exception) ( // code )
O try
bloco inclui o código que pode gerar uma exceção.
O catch
bloco inclui o código que é executado quando ocorre uma exceção dentro do try
bloco.
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 try
bloco.
Quando o programa encontra esse código, ArithmeticException
ocorre. E, a exceção é capturada pelo catch
bloco e executa o código dentro do catch
bloco.
O catch
bloco só é executado se houver uma exceção dentro do try
bloco.
Nota : Em Java, podemos usar um try
bloco sem um catch
bloco. No entanto, não podemos usar um catch
bloco sem um try
bloco.
Java tente … finalmente bloquear
Também podemos usar o try
bloco 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 try
bloco junto com o finally
bloco. Podemos ver que o código dentro do try
bloco está causando uma exceção.
No entanto, o código dentro do finally
bloco é executado independentemente da exceção.
Java tente … pegar … finalmente bloquear
Em Java, também podemos usar o bloco finally após o try… catch
bloco. 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 é 5
e 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 finally
bloco é sempre executado, incluímos código para fechar o PrintWriter
bloco 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 finally
bloco não é executado:
- Uso de
System.exit()
método - Uma exceção ocorre no
finally
bloco - A morte de um fio
Vários blocos Catch
Para cada try
bloco, pode haver zero ou mais catch
blocos. Vários catch
blocos nos permitem tratar cada exceção de maneira diferente.
O tipo de argumento de cada catch
bloco 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 arr
de 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, IndexOutOfBoundException
ocorre.
Quando ocorre uma exceção no try
bloco,
- The exception is thrown to the first
catch
block. The firstcatch
block does not handle anIndexOutOfBoundsException
, so it is passed to the nextcatch
block. - The second
catch
block in the above example is the appropriate exception handler because it handles anIndexOutOfBoundsException
. 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.