| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 09:20:25
|
stone010
Thread.start()
![[Avatar]](/images/avatar/b7e3524361c9f4681818d388431beeac.jpg)
Membro desde: 16/10/2008 09:27:32
Mensagens: 34
Offline
|
Andei lendo bastante a respeito de tratamento de erros e fiquei um pouquinho confuso quanto ao uso da instrução throw.
Por exemplo, quando e como exatamente deve ser usado um throw e um throw new?
This message was edited 1 time. Last update was at 31/03/2009 08:13:20
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 09:41:56
|
fernandoeick
JavaEvangelist
Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline
|
A palavra reservada throws vai na assinatura do método e indica que este método poderá lançar uma exceção que deve ou ser relançada ou capturada pelo método que a está chamando. A palavra reservada throw new serve para lançar a exceção de dentro do corpo do método como em: A parte de artigos do GUJ traz algo a respeito de tratamento de exceções. Acho que pode ser uma boa. Att.
This message was edited 1 time. Last update was at 30/03/2009 09:43:05
|
Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5
E dá-lhe Grêmio! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 09:54:45
|
stone010
Thread.start()
![[Avatar]](/images/avatar/b7e3524361c9f4681818d388431beeac.jpg)
Membro desde: 16/10/2008 09:27:32
Mensagens: 34
Offline
|
Obrigado. Poderia postar um exemplo prático (pode ser simples mesmo) em que seria útil o uso de um "throw new"?
This message was edited 1 time. Last update was at 30/03/2009 10:01:09
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 10:21:22
|
jairelton
JavaChild
Membro desde: 23/06/2006 13:36:04
Mensagens: 108
Offline
|
Vale lembrar que a instrução não é throw new, mas somente throw. O new é para criar um novo objeto Exception e não faz parte do throw, você também pode lançar um objeto que já existe.
|
Jair Elton |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 11:03:10
|
fernandoeick
JavaEvangelist
Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline
|
stone010 wrote:Obrigado. Poderia postar um exemplo prático (pode ser simples mesmo) em que seria útil o uso de um "throw new"?
Segue: A regra para tratamento de exceções é: declare ou capture. Qualquer dúvida posta aí....
This message was edited 3 times. Last update was at 30/03/2009 11:08:18
|
Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5
E dá-lhe Grêmio! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 11:44:44
|
stone010
Thread.start()
![[Avatar]](/images/avatar/b7e3524361c9f4681818d388431beeac.jpg)
Membro desde: 16/10/2008 09:27:32
Mensagens: 34
Offline
|
Sensacional Fernando. Já deu uma ótima clareada e já vejo outros exemplos que tenho com maior facilidade.
Então, o throws declarado na assinatura do método diz respeito a "Exception original". Ao optar por capturar através do catch no outro método bar(), eu tenho a opção de criar um novo objeto throw (throw new) para relançar essa excessão, correto?
Agora se entendi realmente bem, você poderia ter tratado a excessão diretamente no método main sem a necessidade de criar o "throw new" dentro do catch no método bar(), porém preferiu relançar a excessão somente para fim de esclarecer minha duvida correto?
Além disso tentando ir só um pouquinho mais a fundo, no método bar(), poderia ser o caso de você relançar a excessão, para uma "excessão de negócio" criado por mim mesmo certo? Tipo relançar o NumberFormatException para outra classe que eu criei estendendo Exception, chamada ficticialmente por exemplo, "NumeroInvalidoException", ou não?
Por exemplo, dentro do método bar():
This message was edited 6 times. Last update was at 30/03/2009 11:56:35
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 12:11:49
|
alexandre99
JavaTeenager
Membro desde: 26/02/2009 09:11:15
Mensagens: 183
Offline
|
sgsdg
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 12:31:50
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
Recomendo a leitura desses 3 textos, para não se perder no uso de exceções:
-> Exceções: Conceitos
-> Exceções: Boas Práticas, Más Práticas
-> Exceções: Classes Utilitárias
O que posso dizer de principal que há nesse texto é, seja especifico! ... e use as exceções ja existentes sempre q possivel...
Um exemplo de uso que fica facil
por exemplo, essa exceção, MaximumSizeException é uma exceção que eu criei, que extends IllegalArgumentException...
Ou seja, uma exeção especifica, gerada quando o argumento nome, é passado de forma ilegal, nesse caso especifico, qunado seu tamnho é maior que 45...
na minha exceção varios parametros são passados de forma a rastrear o erro... a classe source, ou seja, fonte do erro, (this) ... o nome da propriedade referente ao argumento que gerou o erro, no caso "nome" ... o valor da propriedade que gerou o erro (nome) ... o valor maximo do comprimento do nome (45) ...
ai depois é possivel resgatar essas informações quando a exceção é lançada...
This message was edited 1 time. Last update was at 30/03/2009 12:32:24
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 14:02:18
|
fernandoeick
JavaEvangelist
Membro desde: 24/01/2007 14:18:48
Mensagens: 489
Localização: Campinas-SP
Offline
|
stone010 wrote:Então, o throws declarado na assinatura do método diz respeito a "Exception original". Ao optar por capturar através do catch no outro método bar(), eu tenho a opção de criar um novo objeto throw (throw new) para relançar essa excessão, correto?
Correto, diz respeito a exceção original, recebida a partir de outro método. Ou então é uma exceção nova, recém lançada por este método mesmo.
stone010 wrote:Agora se entendi realmente bem, você poderia ter tratado a excessão diretamente no método main sem a necessidade de criar o "throw new" dentro do catch no método bar(), porém preferiu relançar a excessão somente para fim de esclarecer minha duvida correto?
Exato. Mas mesmo assim a assinatura do método bar deve permanecer igual. Somente o que tu tiraria seria o try/catch. A assinatura permaneceria igual para não quebrar a regra declare ou capture. Deixando somente a assinatura você está dizendo que está declarando/relançando.
stone010 wrote:Além disso tentando ir só um pouquinho mais a fundo, no método bar(), poderia ser o caso de você relançar a excessão, para uma "excessão de negócio" criado por mim mesmo certo? Tipo relançar o NumberFormatException para outra classe que eu criei estendendo Exception, chamada ficticialmente por exemplo, "NumeroInvalidoException", ou não?
Por exemplo, dentro do método bar():
Sim, você poderia fazer isso.
|
Analista/Desenvolvedor Java
Graduado em Informática - Sistemas de Informação.
Sun Certified Java Programmer 6.0
Next Step: SCWCD 5
E dá-lhe Grêmio! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 15:46:16
|
stone010
Thread.start()
![[Avatar]](/images/avatar/b7e3524361c9f4681818d388431beeac.jpg)
Membro desde: 16/10/2008 09:27:32
Mensagens: 34
Offline
|
blz Fernando, valews jow, isso esclarece muita coisa cara.
vlws lavieri...
abraços
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 16:24:49
|
uncoloredmind
Entusiasta Java
![[Avatar]](/images/avatar/56cbeedbcbf833a7b33aa0f07260b851.png)
Membro desde: 15/12/2008 08:04:23
Mensagens: 24
Offline
|
jairelton wrote:Vale lembrar que a instrução não é throw new, mas somente throw. O new é para criar um novo objeto Exception e não faz parte do throw, você também pode lançar um objeto que já existe.
qual o efeito de lançar um objeto que ja existe?
vai retornar o que ?
fiquei na duvida
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/03/2009 16:40:28
|
Lavieri
GUJ Master
![[Avatar]](/images/avatar/7b41bfa5085806dfa24b8c9de0ce567f.png)
Membro desde: 27/01/2004 13:39:31
Mensagens: 1851
Localização: João Pessoa / PB
Offline
|
uncoloredmind wrote:
jairelton wrote:Vale lembrar que a instrução não é throw new, mas somente throw. O new é para criar um novo objeto Exception e não faz parte do throw, você também pode lançar um objeto que já existe.
qual o efeito de lançar um objeto que ja existe?
vai retornar o que ?
fiquei na duvida
esse aqui...
This message was edited 1 time. Last update was at 30/03/2009 16:41:31
|
Sun Certified Java Programmer (SCJP 6)
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-Martin Fowler et al, Refactoring: Improving the Design of Existing Code, 1999
Meu blog -> http://blog.tomazlavieri.com.br/ |
|
|
 |
|
|