Exceções devem ser exatamente isso ... exceções. A melhor prática ao usar exceções é usá-las para cobrir a situação em que algo contrário ao que você espera que aconteça. O exemplo clássico é o FileNotFoundException que é lançado quando um arquivo simplesmente não existe. Se você estiver testando a existência do arquivo, use File.exists (), já que está simplesmente cutucando com um bastão de 10 pés para ver se bate em alguma coisa.
Tecnicamente, você pode obter os mesmos resultados cercando-o em uma tentativa de captura e usando o arquivo como se ele existisse, mas A) as exceções geralmente são caras em termos de recursos e B) os programadores presumem que você quisesse que o arquivo existisse se existisse. em uma tentativa de captura, o que aumenta a confusão geral de um programa.
Existem muitas situações nas quais escreverei um método que busca algum valor em um banco de dados. Milhares de coisas podem dar errado e, vendo como eu só preciso de um pequeno pedaço de informação, é inconveniente cercar a chamada com uma lista de captura de tentativa que contém 5 exceções diferentes. Então, eu vou pegar exceções no método de busca. Se algo der errado, tomo a ação apropriada para fechar a conexão com o banco de dados ou outros enfeites na cláusula finally e retorno nulo. Essa é uma boa prática, não apenas porque simplifica seu código, mas também porque "null" envia a mesma mensagem que você poderia ter recebido de uma exceção ... de que algo não saiu como o planejado. Gerencie detalhes de exceção no método de busca, mas gerencie o que fazer quando as coisas não acontecerem
Por exemplo:
Integer getUserCount() {
Integer result = null;
try {
// Attempt to open database and retrieve data
} catch (TimeoutException e) {
logger.error("Got a watch?");
} catch (MissingDatabaseException e) {
logger.error("What are you smoking?");
} catch (PermissionsToReadException e) {
logger.error("Did you *really* think you were getting away with that?");
} catch (PressedSendButtonToHardException e) {
logger.error("Seriously.. just back away from the computer... slowly..");
} catch (WTFException e) {
logger.error("You're on your own with this one.. I don't even know what happened..");
} finally {
// Close connections and whatnot
}
return result;
}
void doStuff() {
Integer result = getUserCount();
if(result != null) {
// Went as planned..
}
}