Saudacoes , tenho certa duvida quanto a sintaxe do codigo abaixo
throw new IllegalArgumentException();
refiro-me a diferenca entre throw e throws , e porque do "new" . Desde ja agradeco . Marcelo
Saudacoes , tenho certa duvida quanto a sintaxe do codigo abaixo
throw new IllegalArgumentException();
refiro-me a diferenca entre throw e throws , e porque do "new" . Desde ja agradeco . Marcelo
throws é usado na declaração do método, ele indica que quando um código chamar esse método ele deve capturar a exceção, mesmo que não faça nada com ela ou mesmo que lance-a novamente. throw é um statement que ordena o lançamento da exceção, ele ainda transfere o fluxo da execução para os métodos que chamaram a função. O new creio que se trata da instanciação de uma nova exceção, visto que exceções, em java, também são obejtos .
throws faz parte da assinatura do método, de forma que especifica todas as exceções que devem ser tratadas ao se realizar uma chamada ao método.
Ex:
public void metodo() throws Exception {
if(condicaoDeErro) {
throw new Exception("mensagemDeErro");
}
}
/**
...
*/
public void chamador() {
try {
metodo();
} catch(Exception e) {
// trata a condição de erro sinalizada pela exceção
}
}
throw, por outro lado, é utilizada para lançar a exceção propriamente dita. No exemplo acima, poderíamos decidir delegar o tratamento da exceção um passo acima na pilha de métodos.
public void chamador() throws Exception {
try {
metodo();
} catch(Exception e) {
throw e;
}
}
Agora, quanto à parte do new, devemos lembrar que exceções, ainda que um tipo especial, são objetos. Portanto precisam ser instanciadas. Como o throw age de forma "semelhante" ao return, na realidade estamos criando um objeto do tipo exceção e retornando sua referência ao método chamador, sem atribuí-lo antes a uma variável auxiliar. Devemos entender a cláusula catch como se uma função fosse, ou seja, e é um argumento, e recebe a referência de retorno de throw. Seria perfeitamente válido, entretanto, fazer o seguinte:
if(condicaoDeErro) {
Exception e = new Exception("mensagemDeErro");
throw e;
}
Portanto, a forma
throw new Exception("mensagemDeErro");
é meramente um meio de deixar o código mais enxuto e legível.