Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Entender o bloco try-catch
  2. Entender como capturar mais de uma exceção
  3. Entender o bloco finally

A captura de erros na linguagem Java, é feito utilizando o bloco try-catch que pode ser visto na sintaxe abaixo:

Sintaxe
try{
 //código que será testado
}
catch( tipo_excecao nome_objeto ){
 //código para tratamento de erro
}
Onde
try: possui um corpo de código que será executado
tipo_excecao: tipo de dado da exceção lançada, nativa ou do criada pelo usuário
nome_objeto: nome do objeto que irá armazenar os dados do erro ocorrido
catch: possui um corpo de código que será executado caso algum erro ocorra em try

Quando esse bloco try-catch é utilizado, as declarações dentro do corpo do bloco try são executadas. Caso algum erro ocorra, uma Exceção(Exception) é lançada e o fluxo de execução é desviado para o bloco catch para tratamento da exceção.

O bloco catch é "alimentado" por um objeto que contem as informações sobre a exceção ocorrida como a mensagem de erro, linha onde erro ocorreu, stacktrace e outros.

Em Java, além das diversas exceções nativas, permite a criação de exceções customizadas do usuário.

Exemplo 1
//Main.java
public class Main
{
	public static void main(String[] args) {

        try
        {
            //Divisão por zero
            int a = 10/0;
        }
        catch(Exception e ) //captura genérica de exceção
        {
            //recuperar mensagem da exceção
            System.out.println(e.getMessage());
        }
	}
}
Saída
Ocorreu um erro

Como o bloco try pode conter várias declarações de código que podem gerar diferentes exceções, é possível capturá-las no bloco catch. Isso é feito declarando um bloco catch para cada tipo de possível exceção como na sintaxe abaixo:

Sintaxe
try{
  //omitido
}
catch( tipo_excecao1 nome_objeto ){
 //tratamento
}
catch( tipo_excecao2 nome_objeto ){
 //tratamento
}
catch( tipo_excecaoN nome_objeto ){
 //tratamento
}
Onde
tipo_excecao: tipo de dado da exceção lançada.
nome_objeto: nome do objeto que irá armazenar os dados do erro ocorrido.
Exemplo 2
//Main.java
public class Main {

    public static int metodo1(){
       return 1/0;            
    }
    public static void metodo2(){
        int[] vt = {1,2,3};        
        int v = vt[10];
    }
	public static void main(String[] args){

        try{
            metodo1();
            metodo2();
        }
        catch(ArithmeticException e ){
            System.out.println("Divisão por zero.");
        }
        catch(ArrayIndexOutOfBoundsException e ){
            System.out.println("índice inválido.");
        }
	}
}
Saída
Divisão por zero.

Os blocos catch devem ser declarados a partir das exceptions menos genéricas até mais genéricas para que a exception lançada no try não seja capturada de forma errada pelo catch.

Exemplo 3
try{
    //omitido
}
catch(ArithmeticException e ){
    //mais específica
    System.out.println("Divisão por zero.");
}
catch(ArrayIndexOutOfBoundsException e ){
    //mais específica
}
catch(Exception e ){
    //mais genérica
}
Saída
-

O bloco finally, quando declarado tem suas declarações executadas independente de ocorrer uma exception durante a execução do bloco try.

Sintaxe
try{
   //corpo
}
catch( tipo_excecao nome_objeto ){
   //corpo
}
finally
{
  //corpo
}

O bloco finally, normalmente, é utilizado para liberar recursos como alocação de memória, arquivos físicos e outros recursos usados.

Exemplo 4
//Main.java
public class Main
{
	public static void main(String[] args) {
        try {
          int[] vetor = {1, 2, 3,4,5};
          System.out.println(vetor[10]); //ArrayIndexOutOfBoundsException
        } 
        catch (Exception e) {
          System.out.println("ArrayIndexOutOfBoundsException");
        } 
        finally {
          System.out.println("Recursos liberados.");
        }
    }
}
Saída
ArrayIndexOutOfBoundsException
Recursos liberados.
  1. 24/09/2024 - revisão 2 - Correção em numeração de exemplos; ajustes pontuais
  2. 08/02/2024 - revisão 1 - correção em navegação e erros gramaticais
  3. 04/09/2023 - versão inicial