Qual a diferença entre a palavra-chave throw e throws ???
throw - verbo no imperativo (serve para mandar)
Ex. throw Something; = Lance alguma coisa.
throws - verbo no presente (serve para declarar)
Ex. public static void main(String[] args) throws Exception = esta função lança uma exceção.
Mais explicitamente, o throw lança a exceção no meio de seu código, ou seja, qnd vc quer disparar uma excessão utilize esta palavra reservada, quanto a throws, informa ao compilador e ao desenvolvedor que determinado método poderá disparar akela exception.
public void getSomething(int param) throws Exception{
if( param == 0 ){
throw new Excepton("Erro no parametro");
}
System.out.println("Tá tudo certo, pode continuar...");
}
Alô criançada, o Gozo chegou…
Entao, para que eu possa usar o throw eu sou obrigado realmente a utilizar o throw na declaracao do meu metodo ??
Não necessariamente…
você pode fazer assim:
public void seuMetodo() {
try {
if( condicao1 == false ) {
throw new Exception("Condição 1 é false");
}
// se não deu erro acima, processa aqui
} catch( Exception e ) {
// faz log do erro
}
// continuar a processar
}
o throws diz que o metodo pode lançar em algum momento uma exceção
o throw lança a exceção
Quando vc usa throws em algum método você obriga quem for chamar ele a:
trata-lá usando try catch
ou “passar pra cima” no caso do método também dar throws na exception ou numa classe mãe dela
[]´s
[quote]As Exceções, podem ser classificadas em tres tipos: Cheked, Runtime e Errors.
Cheked: Descrevem problemas que podem acontecer em um programa de lógica correta, tipicamente falhas de usuários ou problemas de I/O.
Runtime: Descrevem erros de programação. Este tipo de exceção pode ser capturada e tratada, mas por motivos óbvios não deveria ocorrer.
Errors: Descrevem problemas de difícil recuperação, tipicamente de ambiente onde a aplicação está executando (sistema operacional, JVM, …).
Devido as características de cada tipo de exceção fica claro que a Checked pode ocorrer a qualquer momento da execução de um sistema, ou componente de Framework, e é obrigatório a declaração de linhas de código para manipulação e tratamento.[/quote] Ou seja, utilização dos blocos try/catch ou ainda repassá-las com a instrução throws.