Exceções
Exceções são objetos que indicam que um erro ocorreu durante a execução de um programa. As exceções podem ser geradas por erros no código do programa, como uma tentativa de acessar um índice inválido em um array, ou por condições externas, como um arquivo não encontrado. O tratamento de exceções é essencial para garantir que um programa continue a funcionar adequadamente após um erro.
Hierarquia de exceções
Em Java, todas as exceções são objetos que herdam da classe Throwable
. A classe Throwable
tem duas subclasses principais: Error
e Exception
. As classes que herdam de Error
indicam problemas que não podem ser tratados pelo programa e geralmente indicam um problema no ambiente em que o programa está sendo executado. As classes que herdam de Exception
indicam problemas que podem ser tratados pelo programa. As classes Exception
são divididas em duas categorias: RuntimeExceptions e Exceptions.
RuntimeExceptions: erros que ocorrem durante a execução normal do programa. Geralmente são erros de lógica, como dividir um número por zero ou tentar acessar um índice inválido em um array.
Exceptions: erros que ocorrem durante a execução do programa, mas que podem ser tratados. Geralmente são problemas que ocorrem fora do controle do programa, como um arquivo não encontrado ou um erro de entrada/saída.
Tratando exceções
O tratamento de exceções em Java é feito por meio de blocos try-catch
. O bloco try
contém o código que pode gerar uma exceção, e o bloco catch
é onde a exceção é tratada. Um bloco try
pode ter um ou vários blocos catch
. Cada bloco catch captura uma ou mais exceções e contém o código que deve ser executado para lidar com a exceção.
Exemplo:
try {
// código que pode gerar exceção
} catch (ExceptionTypeA e) {
// tratamento da exceção
} catch (ExceptionTypeB | ExceptionTypeC e) {
// tratamento da exceção
} finally {
// código que é executado independentemente de ocorrer uma exceção
}
O bloco finally
é opcional e é executado independentemente de uma exceção ocorrer ou não.
Exceções personalizadas
Para criar uma exceção personalizada, basta criar uma classe que herda e Exception
ou RuntimeException
. A classe deve ter um construtor que chama o construtor da superclasse e deve definir o comportamento da exceção.
Exemplo:
public class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
A classe MyException
herda de Exception
e tem um construtor que chama o construtor da classe Exception
com uma mensagem de erro.
Lançando exceções
A palavra chave throw
é utilizada para lançar uma exceção explicitamente em um método. Isso significa que, quando ocorre uma condição que não pode ser tratada no próprio método, pode-se utilizar a palavra chave throw
para lançar uma exceção com uma mensagem de erro personalizada. A sintaxe da palavra chave throw
é:
throw new TipoDaExcecao("Mensagem de erro personalizada");
A palavra chave throws
, por sua vez, é utilizada na assinatura do método para indicar que esse método pode lançar uma exceção de um tipo específico. Isso significa que quem chamar o método deve estar preparado para lidar com a exceção lançada. A sintaxe da palavra chave throws
é:
[modificadores] tipoDoRetorno nomeDoMetodo(lista de parametros) throws TipoDaExcecao, TipoDaOutraExcecao, ...
A lista de exceções que podem ser lançadas é separada por vírgulas. Se um método lança uma exceção verificada e a palavra chave throws
não está presente na sua assinatura, um erro de compilação será gerado.
A seguir, um exemplo de método que utiliza a palavra chave throw
:
public int dividir(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("Não é possível dividir por zero");
}
return a / b;
}
Nesse exemplo, o método dividir
recebe dois inteiros como parâmetros e verifica se o segundo é igual a zero. Se isso ocorrer, o método lança uma exceção ArithmeticException
com uma mensagem de erro personalizada.
Referências
Last updated