relançando a mesma excecao - pg 213 kathy

10 respostas
LPJava

ae pessoal estudando o cap 5 exceção no livro da kathy ai na pagina 213 tem um codigo semelhante ao abaixo:

class Relan{
	static void doStuf(){
			try{
				int r = 8/0;
			}
			catch(Exception e){
				throw e;
			}			
		}
		
	public static void main(String args[]){
		doStuf();
	}
}

mais a minha duvida eh na linha throw e qdo me deparo com essa situação que está acontecendo pois o codigo acima nao eh compilado… ela diz isso:
"é evidente que o metodo pode lançar uma excecao verificada, portanto o compilador dira: Certo, é formidavel que vc tenha um bloco try/catch, mais nao eh o suficiente. Se vc quiser relacanar a excecao que capturou tera que declara-la."
Como assim? o que me atrapalhou eh como fazer isso… quem puder me ajudar agradeço…

10 Respostas

cassio

O que ela está falando é que seu método doStuff() precisa ter a seguinte assinatura para poder relançar a exceção:

static void doStuff() throws Exception{
   ...
}
LPJava

mais o throw e ta fazendo o q mesmo?

derheimen

Vc deve tratar esta exceção no método do doStuf(), adicionando um bloco try/catch, ou lança-la para o método main usando throws Exception.
Mas o método main deverá trata-lá ou lançala pra frente, usando throws<Nome_Exception>.
O seu código ficaria desta forma se vc tratar esta nova exception.

try{
        int r = 8/0;
} catch(Exception e) {
        try {
	        throw e;
        } catch(Exception e2) { }	
}
LPJava

entao em throw to criadno apenas uma novas exceção do tipo Exception que deve ser tratada por quem o chamou?
throw e seria o mesmo que:

throw new Exception

:?:

derheimen

Nova ela não é, pois vc não usou o new para criar uma nova exception.
Você esta apenas lançando ela novamente, em algum lugar você deve captura-la com uma cláusula catch ou lança-la com throws.

cassio

Camilo, a idéia é mais ou menos a seguinte:

1- Entra no bloco try e executa algo "arriscado"
2- Execução gera um exceção, a qual é captura pelo bloco catch
3- Este bloco catch diz “sai pra lá, não tenho nada haver com isso, outro que se vire com essa porcaria!” e relança a MESMA exceção. Para que isso possa acontecer o método tem que declarar throws Exception em sua assinatura.
4- Quem chamou o método que gerou a exceção (e não tratou a mesma, apenas passou-a para frente) deve tratá-la ou então passa-la novamente pra frente, e assim por diante

antoniopopete

Camilo a idéia é a seguinte…Como dentro de seu código do método ocorre uma exceção e você ao invés de tratá-la resolve lançar para o método chamador.Nada mais justo que você avisar aquele método que ele precisa de um try/catch ou então ele precisa relançar essa exceção, colocando na assinatura dele (o método chamador) throws Exception…Assim,como o seu método se não trata a exceção deve conter throws Exception na assinatura.
Espero ter esclarecido

LPJava

ah saquei throw e relança minha Exception, mais como o meu metodo nao ta nem catch e nem passando para ninguem por isso que no primeiro codigo que coloquei nao compilou…valeu! :smiley:

josenaldo

Isso mesmo. Isso pode ser usado para acrescentar alguma informação extra à exceção antes de lança-la.

LPJava

oap valeu galera!!

Criado 1 de fevereiro de 2007
Ultima resposta 5 de fev. de 2007
Respostas 10
Participantes 5