No tutorial, aprenderemos sobre diferentes abordagens de tratamento de exceções em Java com a ajuda de exemplos.
No último tutorial, aprendemos sobre as exceções Java. Sabemos que as exceções encerram anormalmente a execução de um programa.
É por isso que é importante lidar com exceções. Aqui está uma lista de diferentes abordagens para lidar com exceções em Java.
- tente … pegar o bloco
- finalmente bloquear
- jogar e jogar palavra-chave
1. Java try … catch block
O bloco try-catch é usado para tratar exceções em Java. Esta é a sintaxe do try… catch
bloco:
try ( // code ) catch(Exception e) ( // code )
Aqui, colocamos o código que pode gerar uma exceção dentro do try
bloco. Cada try
bloco é seguido por um catch
bloco.
Quando ocorre uma exceção, ela é capturada pelo catch
bloco. O catch
bloco não pode ser usado sem o try
bloco.
Exemplo: tratamento de exceções usando try… catch
class Main ( public static void main(String() args) ( try ( // code that generate exception 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, estamos tentando dividir um número por 0
. Aqui, este código gera uma exceção.
Para lidar com a exceção, colocamos o código, 5 / 0
dentro do try
bloco. Agora, quando ocorre uma exceção, o resto do código dentro do try
bloco é ignorado.
O catch
bloco captura a exceção e as instruções dentro do bloco catch são executadas.
Se nenhuma das instruções no try
bloco gerar uma exceção, o catch
bloco será ignorado.
2. Java finalmente bloqueia
Em Java, o finally
bloco é sempre executado independentemente de haver uma exceção ou não.
O finally
bloqueio é opcional. E, para cada try
bloco, pode haver apenas um finally
bloco.
A sintaxe básica do finally
bloco é:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Se ocorrer uma exceção, o finally
bloco é executado após o try… catch
bloco. Caso contrário, ele é executado após o bloco try. Para cada try
bloco, pode haver apenas um finally
bloco.
Exemplo: Manipulação de exceções Java usando finally block
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Resultado
ArithmeticException => / por zero Este é o bloco final
No exemplo acima, estamos dividindo um número por 0 dentro do try
bloco. Aqui, este código gera um ArithmeticException
.
A exceção é capturada pelo catch
bloco. E então o finally
bloco é executado.
Nota : É uma boa prática usar o finally
bloco. É porque pode incluir códigos de limpeza importantes, como,
- código que pode ser acidentalmente ignorado por retornar, continuar ou quebrar
- fechando um arquivo ou conexão
3. Java throw e throws palavra-chave
A throw
palavra-chave Java é usada para lançar explicitamente uma única exceção.
Quando somos throw
uma exceção, o fluxo do programa passa de um try
bloco para outro catch
.
Exemplo: tratamento de exceções usando Java throw
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Resultado
Exceção no thread "main" java.lang.ArithmeticException: Tentando dividir por 0 em Main.divideByZero (Main.java:5) em Main.main (Main.java:9)
No exemplo acima, estamos jogando explicitamente o ArithmeticException
using a throw
palavra - chave.
Da mesma forma, a throws
palavra-chave é usada para declarar o tipo de exceções que podem ocorrer dentro do método. É usado na declaração do método.
Exemplo: Java throws keyword
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate IOException File newFile = new File("test.txt"); FileInputStream stream = new FileInputStream(newFile); ) public static void main(String() args) ( try ( findFile(); ) catch (IOException e) ( System.out.println(e); ) ) )
Resultado
java.io.FileNotFoundException: test.txt (O sistema não pode encontrar o arquivo especificado)
Quando executamos este programa, se o arquivo test.txt não existe, FileInputStream
lança um FileNotFoundException
que estende a IOException
classe.
O findFile()
método especifica que um IOException
pode ser lançado. O main()
método chama esse método e trata a exceção se ela for lançada.
Se um método não trata exceções, o tipo de exceções que podem ocorrer dentro dele deve ser especificado na throws
cláusula.
Para saber mais, visite Java throw and throws.