Exceções marcadas e desmarcadas em Java
1. Visão geral
Java exceptions se enquadram em duas categorias principais:checked exceptions and unchecked exceptions. Neste artigo, forneceremos alguns exemplos de código sobre como usá-los.
2. Exceções verificadas
Em geral, as exceções verificadas representam erros fora do controle do programa. Por exemplo, o construtor deFileInputStream lançaFileNotFoundException se o arquivo de entrada não existir.
Java verifica as exceções verificadas em tempo de compilação.
Portanto, devemos usar a palavra-chavethrows para declarar uma exceção verificada:
private static void checkedExceptionWithThrows() throws FileNotFoundException {
File file = new File("not_existing_file.txt");
FileInputStream stream = new FileInputStream(file);
}
Também podemos usar um blocotry-catch para lidar com uma exceção verificada:
private static void checkedExceptionWithTryCatch() {
File file = new File("not_existing_file.txt");
try {
FileInputStream stream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Algunscommon checked exceptions em Java sãoIOException,SQLException eParseException.
A classeException é a superclasse das exceções verificadas. Portanto, podemoscreate a custom checked exception estendendoException:
public class IncorrectFileNameException extends Exception {
public IncorrectFileNameException(String errorMessage) {
super(errorMessage);
}
}
3. Exceções não verificadas
Se um programa lança uma exceção desmarcada, isso reflete algum erro dentro da lógica do programa. Por exemplo, se dividirmos um número por 0, Java lançaráArithmeticException:
private static void divideByZero() {
int numerator = 1;
int denominator = 0;
int result = numerator / denominator;
}
Java does not verify unchecked exceptions at compile-time. Além disso, não precisamos declarar exceções não verificadas em um método com a palavra-chavethrows . E embora o código acima não tenha erros durante o tempo de compilação, ele lançaráArithmeticException em tempo de execução.
Algunscommon unchecked exceptions em Java sãoNullPointerException,ArrayIndexOutOfBoundsException eIllegalArgumentException.
A classeRuntimeException é a superclasse de todas as exceções não verificadas. Portanto, podemoscreate a custom unchecked exception estendendoRuntimeException:
public class NullOrEmptyException extends RuntimeException {
public NullOrEmptyException(String errorMessage) {
super(errorMessage);
}
}
4. Quando usar exceções verificadas e exceções não verificadas
É uma boa prática usar exceções em Java para que possamos separar o código de tratamento de erros do código regular. No entanto, precisamos decidir que tipo de exceção lançar. OOracle Java Documentation fornece orientação sobre quando usar exceções verificadas e exceções não verificadas:
“Se for razoável esperar que um cliente se recupere de uma exceção, torne-a uma exceção verificada. Se um cliente não puder fazer nada para se recuperar da exceção, torne-a uma exceção não verificada. ”
Por exemplo, antes de abrir um arquivo, podemos primeiro validar o nome do arquivo de entrada. Se o nome do arquivo de entrada do usuário for inválido, podemos lançar uma exceção verificada personalizada:
if (!isCorrectFileName(fileName)) {
throw new IncorrectFileNameException("Incorrect filename : " + fileName );
}
Dessa forma, podemos recuperar o sistema aceitando outro nome de arquivo de entrada do usuário. No entanto, se o nome do arquivo de entrada for um ponteiro nulo ou for uma sequência vazia, significa que temos alguns erros no código. Nesse caso, devemos lançar uma exceção desmarcada:
if (fileName == null || fileName.isEmpty()) {
throw new NullOrEmptyException("The filename is null or empty.");
}
5. Conclusão
Neste artigo, discutimos a diferença entre exceções verificadas e não verificadas. Também fornecemos alguns exemplos de código para mostrar quando usar exceções marcadas ou desmarcadas.
Como sempre, todos os códigos encontrados neste artigo podem ser encontradosover on GitHub.