Pessoal, estou com uma dúvida sobre o tratamento de exceção. Quando vc precisa verificar se uma variável está null, pode-se lançar NullPointerException do meio de um método???
vc pode colocar um try/catch onde achar necessário…
porém uma variável estar null não lança exception…
a nao ser que tente usa-la é claro…
vc pode colocar dentro do bloco try
ou lançar para a classe pai com throws…
;D
Coloca tipo
public class XXX throws Exception {
try {
}
catch (Exception e){
throw new Exception("erro de tal coisa", e);
}
}
Assim vc vai estar tratando os possíveis erros!
Espero ter ajudado
[]'s
Eu costumo fazer isto:
try{
//se correr bem retorna true;
}catch(){
//se não false
}
eu gostaria de lançar uma exceção qdo uma objeto dentro de um método fosse null.
Pelo que li no link do Fabio Kung, então é correto eu lançar uma NullPointerException como neste exemplo abaixo, certo?
public void facaAlgo() {
//código qqer
if(obj == null) {
throw new NullPointerException("Variável obj está nulo");
}
//código qqer
}
Neste caso, não preciso mesmo encapsular o problema numa exceção minha, certo?
certo…
Se esse seu objeto foi algum parâmetro que você recebeu no método, eu jogaria uma IllegalArgumentException.
NullPointerException me parece genérico demais. Seria melhor uma exceção mais específica ao seu caso, dizendo claramente a causa do problema.
Se tem uma dica vital em sistemas é:
Trate as exceções corretamente.
Não as ignore, não converta as exceções para códigos de erro, você estará descartando informações importantes. Trate-as.
Pense no que você deve fazer a respeito da exceção. Se ela não for adequada a sua abstração, você tem três saídas:
- Coloque um throws e deixe que o cliente de sua classe a trate;
- Converta a exceção em uma outra mais adequada com a seguinte técnica:
try {
//código que gera a exceção
}
catch (ExcecaoLancada e)
{
throw new ExcecaoAdequada("Texto da excecao", e);
}
- Se você acha que a exceção não vai ocorrer, não arrisque. Faça o seguinte:
try {
//Codigo que gera a exceção
}
catch (ExcecaoLancada e) {
throw new AssertionFailedException(e);
}
Você não será obrigado a tratar a RuntimeException. Não precisa colocar throws para elas. E, se a runtime exception estourar, você terá o stack trace completo de quando ela aconteceu, que métodos foram chamados, etc.
Ignorar exceções é simplesmente péssimo. Ele faz seu sistema ignorar as exceções, o que gera instabilidade ao longo do tempo. O sistema continua prossegue a execução, gerando classes com estados inválidos. Ele também pode silenciosamente ignorar um erro, que pode levar dias, meses para ser descobertos e, quando for, pode ter feito um grande estrago.
O código do davidhc é interessante, exceto pelo fato de que não se deve capturar a Exception genérica. Se ele estava dando a dica 2, ok. Mas lembre-se capturar o tipo Exception vai capturar também as runtime exceptions. Dar throw em uma exception genérica também é péssimo e pode causar mais mal do que bem. Escolha a exceção certa para o seu caso, que esteja de acordo com a sua biblioteca, crie a exceção se necessário.
O código do Marcos Alexandre é um pouco melhor, mas ele perde muita informação do stack trace. Pode ser usado se a sua classe garante o tratamento da exceção adequado, gerando o boolean em pouquissimos casos bem específicos. Ainda assim, seria bom guardar o stack trace das exceções em algum log, para consulta posterior.
Quanto ao seu caso.
Sim se o objeto for nulo, segundo o livro Effective Java do Joshua Block (criador da biblioteca collections do Java) a exceção que deve ser lançada é mesmo uma null pointer exception. O código é mesmo o que você fez.
if (minhaVariavel == null)
throw new NullPointerException("O valor de minhaVariavel não pode ser nulo!");
IllegalArgumentException também é uma opção. Há muita discussão em qual das duas usar. Eu, particularmente, sou mais simpatizante dessa última também, assim sei que um NullPointerException só ocorre por um erro grave de programação meu. Fica a seu critério. O importante é realmente lançar uma exceção.
ow mas se no caso, quero q minha variável continue nula eu uso alguma exceção?