O acima é considerado uma exceção verificada? Não O fato de você estar manipulando uma exceção não a torna Checked Exception
se for a RuntimeException
.
É RuntimeException
um unchecked exception
? sim
Checked Exceptions
são subclasses
de java.lang.Exception
Unchecked Exceptions
são subclasses
dejava.lang.RuntimeException
As chamadas que lançam exceções verificadas precisam ser encerradas em um bloco try {} ou tratadas em um nível acima no chamador do método. Nesse caso, o método atual deve declarar que lança as referidas exceções para que os chamadores possam tomar as providências necessárias para lidar com a exceção.
Espero que isto ajude.
P: devo exibir a exceção exata ou mascará-la usando a exceção?
A: Sim, esta é uma pergunta muito boa e uma consideração importante do projeto. A classe Exception é uma classe de exceção muito geral e pode ser usada para quebrar exceções internas de baixo nível. É melhor criar uma exceção personalizada e envoltar dentro dela. Mas, e um grande problema - nunca oculto na causa raiz original subjacente. Por exemplo, Don't ever
faça o seguinte -
try {
attemptLogin(userCredentials);
} catch (SQLException sqle) {
throw new LoginFailureException("Cannot login!!"); //<-- Eat away original root cause, thus obscuring underlying problem.
}
Em vez disso, faça o seguinte:
try {
attemptLogin(userCredentials);
} catch (SQLException sqle) {
throw new LoginFailureException(sqle); //<-- Wrap original exception to pass on root cause upstairs!.
}
Consumir a causa raiz original enterra a causa real além da recuperação é um pesadelo para as equipes de suporte à produção, onde tudo o que têm acesso é logs de aplicativos e mensagens de erro. Embora o último seja um design melhor, mas muitas pessoas não o usam com frequência porque os desenvolvedores não conseguem transmitir a mensagem subjacente ao chamador. Portanto, faça uma observação firme: Always pass on the actual exception
volte com ou sem quebra em qualquer exceção específica do aplicativo.
Na tentativa de captura RuntimeExceptions
RuntimeException
Como regra geral, os s não devem ser tentados. Eles geralmente sinalizam um erro de programação e devem ser deixados em paz. Em vez disso, o programador deve verificar a condição de erro antes de chamar algum código que possa resultar em a RuntimeException
. Por exemplo:
try {
setStatusMessage("Hello Mr. " + userObject.getName() + ", Welcome to my site!);
} catch (NullPointerException npe) {
sendError("Sorry, your userObject was null. Please contact customer care.");
}
Esta é uma má prática de programação. Em vez disso, uma verificação nula deveria ter sido feita como -
if (userObject != null) {
setStatusMessage("Hello Mr. " + userObject.getName() + ", Welome to my site!);
} else {
sendError("Sorry, your userObject was null. Please contact customer care.");
}
Mas há momentos em que essa verificação de erro é cara, como formatação de números, considere isso:
try {
String userAge = (String)request.getParameter("age");
userObject.setAge(Integer.parseInt(strUserAge));
} catch (NumberFormatException npe) {
sendError("Sorry, Age is supposed to be an Integer. Please try again.");
}
Aqui, a verificação de erro antes da invocação não vale o esforço, porque significa essencialmente duplicar todo o código de conversão de cadeia para número inteiro dentro do método parseInt () - e é propenso a erros se implementado por um desenvolvedor. Portanto, é melhor acabar com o try-catch.
Então, NullPointerException
e NumberFormatException
são os dois RuntimeExceptions
, a captura de um NullPointerException
deve ser substituída por uma verificação nula graciosa, enquanto eu recomendo a captura NumberFormatException
explícita para evitar a possível introdução de código suscetível a erros.
DataSeries
classe que contém dados que sempre devem permanecer em ordem baseada no tempo. Existe um método para adicionar um novoDataPoint
ao final de umDataSeries
. Se todo o meu código estiver funcionando corretamente durante todo o projeto,DataPoint
nunca deverá ser adicionado um ao final que tenha uma data anterior à que já está no final. Cada módulo em todo o projeto é construído com esse truísmo. No entanto, eu verifico esta condição e emito uma exceção desmarcada, se isso acontecer. Por quê? Se isso acontecer, quero saber quem está fazendo isso e corrigi-lo.