Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida na sintaxe do codigo

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

2 respostas

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 .

solução!

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.