image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Article image

MA

Michel Alves09/02/2024 01:04
Compartilhe

Funções em Java: usando o try catch

  • #Java

Ao executar um código java, podem ocorrer erros e um erro pode parar a execução da aplicação. Para evitar que a aplicação pare, é utilizado o bloco try catch para fazer o tratamento de exceções.

O bloco try(tentar) tenta executar um código e caso ocorra uma exceção, o catch(pegar), a captura e faz o tratamento dela.

Após uma exceção ter alcançado o bloco catch, o código volta ao fluxo normal de execução para fora do try catch.

A sintaxe do try catch é a seguinte:

try {
 bloco de código
} catch(Exception e) {
 bloco para tratar o erro
}

Abaixo segue um exemplo onde são declaradas três variáveis, a = 10, b = 0 e c recebe o resultado da divisão entre a e b. Tentar dividir um valor por zero gera a exceção "ArithmeticException" e por isso a atribuição do resultado para a variável c foi colocada dentro do bloco try.

public class TryCatch {
 public static void main(String[] args) {
    int a = 10;
    int b = 0;
    int c;

    try {
       c = a / b;
       System.out.println(c);
    } catch(ArithmeticException e) {
       System.out.println("Algo deu errado: " + e.getMessage());
       e.printStackTrace();
    }

    System.out.println("Texto impresso após o tratamento da exceção.");
 }
}

O método "getMessage()" retorna uma String com o detalhe da mensagem do erro.

O método "printStackTrace()" imprime o rastreamento da pilha para identificarmos onde ocorreu o erro.

Ao executarmos esse código, temos a seguinte saída:

Algo deu errado: / by zero
java.lang.ArithmeticException: / by zero
 at TryCatch.main(TryCatch.java:8)
Código executado após o tratamento da exceção.

É possível colocar mais de um bloco catch para capturar outros tipos de exceções. Utilizando o exemplo anterior, foi declarado um array e iniciado com três posições e no bloco try, ao tentar acessar uma posição maior que o tamanho total do array é gerada a exceção "ArrayIndexOutOfBoundsException".

public class TryCatch {
 public static void main(String[] args) {
    int a = 10;
    int b = 2;
    int c;
    int[] numeros = {11, 12, 7};

    try {
       c = a / b;
       System.out.println(c);

       System.out.println(numeros[3]);
    } catch(ArithmeticException e) {
       System.out.println("Algo deu errado: " + e.getMessage());
       e.printStackTrace();
    } catch(ArrayIndexOutOfBoundsException e) {
       e.printStackTrace();
    }

    System.out.println("Texto impresso após o tratamento da exceção.");
 }
}

A saída desse exemplo informa que o índice acessado está fora dos limites do tamanho do array:

5
java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
at TryCatch.main(TryCatch.java:12)
Código executado após o tratamento da exceção.

Ao colocar dois ou mais blocos catch apenas um será executado, mesmo que haja outros depois dele.

Ainda existe a possibilidade de usar o Multi-Catch que permite capturar mais de uma exceção em apenas um bloco catch. Ele é utilizado quando o tratamento é o mesmo para todas as exceções, como por exemplo, imprimir o rastreamento da pilha de exceção. Para usar o Multi-Catch, é colocado os nomes das classes separados pelo caractere pipe "|" conforme o exemplo abaixo.

public class TryCatch {
 public static void main(String[] args) {
    int a = 10;
    int b = 0;
    int c;
    int[] numeros = {11, 12, 7};

    try {
       c = a / b;
       System.out.println(c);

       System.out.println(numeros[3]);
    } catch(ArithmeticException | ArrayIndexOutOfBoundsException e) {
       e.printStackTrace();
    }

    System.out.println("Texto impresso após o tratamento da exceção.");
 }
}

Saída do exemplo acima:

java.lang.ArithmeticException: / by zero
 at TryCatch.main(TryCatch.java:9)
Texto impresso após o tratamento da exceção.

Quando ocorrer uma exceção e ainda existir a necessidade de executar um código, é possível usar o bloco finally. Sua sintaxe é:

try {
 bloco de código
} catch(Exception e) {
 bloco para tratar o erro
} finally {
 bloco de código
}

Também é possível usar o finally sem o bloco catch:

try {
 bloco de código
} finally {
 bloco de código
}

Exemplo de sua execução:

public class TryCatch {
 public static void main(String[] args) {
    int a = 10;
    int b = 0;
    int c;
    int[] numeros = {11, 12, 7};

    try {
       c = a / b;
       System.out.println(c);

       System.out.println(numeros[3]);
    } catch(ArithmeticException | ArrayIndexOutOfBoundsException e) {
       e.printStackTrace();
    } finally {
       System.out.println("O bloco finally é executado mesmo ocorrendo uma exceção.");
    }
 }
}

Saída:

java.lang.ArithmeticException: / by zero
 at TryCatch.main(TryCatch.java:9)
O bloco finally é executado mesmo ocorrendo uma exceção.

Conclusão

Usar try catch torna sua aplicação mais robusta e menos suscetível a falhas, quando estas são identificadas e tratadas adequadamente.

Para mais informações, consulte: https://docs.oracle.com/javase/tutorial/essential/exceptions/try.html

Compartilhe
Recomendados para você
Deal - Spring Boot e Angular (17+)
Cognizant - Arquitetura com Spring Boot e Cloud
Claro - Java com Spring Boot
Comentários (0)