Throw e throws

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!