Amigos,
Boa noite,
Qual a diferença e quando utilizar thorw ou throws ?
Pois acho que thows é só usado para lançar uma exceção em um método !?
Obrigado.
Achou certo…
O throws você utiliza na assinatura do seu método, o que ira indicar que qualquer chamada à este método deve tratar as exceções lançadas pelo throws com try/catch:
public void meuMetodo() throws SQLException, IOException {}
Quem chamar meu método deve tratar SQLException e IOException, se não o fizer, erro de compilação.
O throw você utilizara lançar uma exceção, por exemplo:
...
throw new IOException("Erro de IO!");
Se você chama isto no seu programa, ele irá lançar uma IOException independente de try/catch.
Olá!
Em outras palavras, com o throws você força o peão que vai usar o teu método a utilizar uma determinada exceção porque quando você criou o método, encontrou uma determinada situação que pode acabar resultando em erro…
public void meuMetodo() throws MinhaExcecao{
if(aconteceAlgoQueEuDefiniQueSejaErro){
throw new MinhaExcecao("Erro porque eu quis!");
}
}
Já o throw você literalmente “lança” uma exceção no meio do programa! 8)
Um eventual uso do teu método
// Se não usar o try, erro de compilação!
try{
meuMetodo();
} catch(MinhaExcecao ex){
ex.printStackTrace();
}
Abraços
Mais um detalhe.
Quando você está trabalhando com excessões verificadas em tempo de compilação (checked exceptions) você é obrigado a usar o throws caso você não trate as mesmas dentro do método. Já com excessões não verificadas, você não é obrigado a utilizar o throws mesmo que você nas as trate dentro do método.
Lembrando que, as excessões verificadas fazem parte da hierarquia da classe Exception, exceto RuntimeException que é a classe mãe das excessões não verificadas. Derivações da classe Error também não são checadas, mas via de regra não se trata erros em Java.
A hierarquia é assim
Throwable
|
|
--- Error (não verificada)
|
|
--- Exception (verificada, todas as derivações são verificadas, exceto RuntimeException)
|
|
--- RuntimeException (não verificada)
Até mais!