| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/05/2007 19:59:53
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline
|
Fala pessoal.
Fiz aqui um "projeto" bem simples que tem duas classes: Ponto e Circulo. No construtor da classe Circulo, são passados como parâmetro o raio (int) e um objeto p da classe Ponto.
Como tratamento de exceções, incluí na assinatura do construtor: throws NullPointerException, IllegalArgumentException, para evitar que o ponto passado como argumento tenha referência nula e que o raio passado seja negativo.
Até aí tudo bem. Só que, quando criei a aplicação com o main e criei um objeto Circulo com parâmetro null para o ponto e, por exemplo, o valor negativo -5 para o raio, só era impresso a exceção para o raio, isto é, não era identificado a referênia null do ponto.
Para tratar esse erro, fui aconselhado a acrescentar o seguinte código ao construtor:
Contudo, o erro persistiu. Alguém sabe o que está acontecendo? O código acima é necessário?
Seguem abaixo o construtor e parte do main:
CONSTRUTOR
PARTE DO MAIN
Obrigado!
|
João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com
 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/05/2007 20:07:20
|
Yky Mattshawn
Virtual Machine Man
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline
|
Está correto, cara.
Quando você usa vários catch's, o primeiro que capturar a excessão "trava" a execução dos blocos catch's adjacentes, mesmo que hajam mais catch's elegíveis à frente. O que ocorre é que, mesmo que você tenha passado 2 parâmetros incorretos, somente a primeira excessão é lançada.
Quando seu programa chega nessa linha:
A execução pula para os blocos catch's, então, o catch (IllegalArgumentException) não é executado.
Veja o try... catch: caso uma excessão seja lançada dentro do bloco try, a execução é "pulada" para o primeiro catch que capture a excessão corretamente. Seguindo essa dedução da execução, basta você imaginar o seu método como se estivesse totalmente dentro de um bloco try, no momento que a excessão ser lançada, ele pára de executar e o tratamento da excessão começa (ou não) em blocos catch.
Espero não ter sido demasiado prolixo oO.
|
Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/05/2007 21:11:30
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Se você sabe que um determinado método pode ter muitos erros, em vez de fazê-lo lançar exceções, você pode coletar as exceções em uma lista, e depois tratar o que for necessário. Exemplo:
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/05/2007 17:46:17
|
Marky.Vasconcelos
Moderador
![[Avatar]](/images/avatar/04940fadf3702cbd84b7a48161037c4f.png)
Membro desde: 11/04/2007 18:18:20
Mensagens: 5932
Localização: São Paulo/SP
Offline
|
Por favor quando postar códigos coloque os entre as tags [ code] e [ /code]
|
Facebook @MarkyHitchhiker +Mark WP: MarkyTech's
Projects:
Android Roadmap - Aprenda Android do inicio (Java é o unico pre-requisito)
Towel ( ObjectTableModel & Swing & Utils )
Tower Defense Game - Java2D [Open-Source] [How-to-play]
EVGD: Programação de jogos (links) Ponto V! - Desenvolvimento de jogos para indies, curiosos e profissionais
DefaultTableModel?! PARE! Não faça isso! Faça melhor!
Dicas: Faça perguntas inteligentes! ; MigLayout ; GridBagLayout (Joke)
Develop games is fantastic, with words you can make worlds!!!
DON'T PANIC!
MarkyHitchhiker's Blog! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 10/05/2007 13:58:28
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline
|
Valeu pessoal, entendi.
Mas, só mais um esclarecimento:
mesmo colocando o código abaixo na assinatura do método
ainda assim preciso colocar os "ifs" do raio e do ponto dentro do método?
[]s
|
João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2007 00:24:33
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline
|
jPscoralicK wrote:Valeu pessoal, entendi.
Mas, só mais um esclarecimento:
mesmo colocando o código abaixo na assinatura do método
ainda assim preciso colocar os "ifs" do raio e do ponto dentro do método?
[]s
?
|
João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2007 22:42:23
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline
|
alguém poderia me responder?
|
João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2007 22:53:39
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
assim sua pergunta nao entendi poe ai a sintaxe o que quer fazer.. mais respondendo de modo geral, vc tem ai exceções nao verificadas onde nao vai ter obrigação nenhuma de declarar ou tratar.. to falando de modo geral.. mais poe sua duvida o que quer fazer...
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 12/05/2007 23:10:56
|
Yky Mattshawn
Virtual Machine Man
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline
|
jPscoralicK wrote:Valeu pessoal, entendi.
Mas, só mais um esclarecimento:
mesmo colocando o código abaixo na assinatura do método
ainda assim preciso colocar os "ifs" do raio e do ponto dentro do método?
[]s
Para o IllegalArgumentException: Sim, você deve manter o seu if.
Entretanto, o if do NullPointerException você pode retirar pois, quando essa linha for executada:
Caso p (o parâmetro do construtor) seja nulo, o Java mesmo irá lançar uma NullPointerException.
|
Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2007 00:17:33
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline
|
Segue o código:
A minha dúvida é a seguinte: mesmo colocando na assinatura do método o throws NullPointerException,
IllegalArgumentException, eu preciso fazer os dois "ifs" dentro do método?
Porque, pelo o que eu li, quando você coloca o "throws" na assinatura, não é preciso fazer "mais nada" relativo a exceções dentro do método.
|
João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2007 00:39:26
|
Yky Mattshawn
Virtual Machine Man
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline
|
Cara, é que tipo: declarar através do throws obriga ao código que chamará seu método/construtor a capturar e/ou repassar a excessão. Ou seja, a excessão não poderá ser "simplesmente ignorada".
Já respondi em relação aos if's cara. Você só precisa criar o if para a IllegalArgumentException, caso contrário, uma IllegalArgumentException nunca será lançada pelo seu contrutor (não neste caso).
|
Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2007 02:12:39
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline
|
Ok, Yky, obrigado.
Mas porque só a IllegalArgumentException tem que ser lançada?
|
João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2007 12:24:21
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
assim eu nao entendi ate agora pq vc ta tentando declarar exeções nao verificadas.. implicitamente elas acontece... segundo a kathy é valido declaracao e tratar exceções verificadas...
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2007 13:30:00
|
jPscoralicK
JavaChild
![[Avatar]](/images/avatar/9b732cc38e40261d900b8008bf9c596e.jpg)
Membro desde: 05/05/2007 09:54:44
Mensagens: 128
Localização: Juiz de Fora, MG
Offline
|
Ok, camilo.
Então, sempre que eu declarar uma exceção, eu tenho que obrigatoriamente lançá-la dentro do método?
|
João Paulo Scoralick
Ciência da Computação - UFJF/MG
http://anouterview.blogspot.com
http://escape13.blogspot.com
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/05/2007 19:41:48
|
Yky Mattshawn
Virtual Machine Man
Membro desde: 18/12/2006 03:34:14
Mensagens: 651
Localização: São Sebastião do Caí / RS
Offline
|
jPscoralicK wrote:Ok, camilo.
Então, sempre que eu declarar uma exceção, eu tenho que obrigatoriamente lançá-la dentro do método?
Não. Ocorre que no seu caso nada dentro do seu construtor irá lançar uma IllegalArgumentException. Você declarou o throws IllegalArgumentException apenas para evitar que seja informado um valor errado, correto? Então, você é que tem que lançar a excessão. É complicado de explicar isso. Talvez alguém possa explanar isso de melhor forma.
|
Yky Mattshawn [ Compusoft - Desenvolvimento de Sistemas Empresariais ]
"Tudo que é ortodoxo ou heterodoxo demais gera heresia."
Bixo 2010 - Ciência da Computação - Feevale/RS e Unisinos/RS |
|
|
 |
|
|