image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Article image

MA

Michel Alves09/02/2024 01:04
Compartilhe

Funções em Java: usando o try catch

    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
    Comentários (0)