Throw vs throws

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.