| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 09:27:04
|
thundercas
JavaEvangelist
![[Avatar]](/images/avatar/292f0300bbddb5ad9efc10f31c452e57.jpg)
Membro desde: 15/09/2007 11:04:51
Mensagens: 429
Localização: São Paulo - SP
Offline
|
Fala galera, beleza???
Estou com a seguinte dúvida... Peço que observem os 2 trechos de código abaixo:
#################
A dúvida é a seguinte: Qual a diferença no tratamento da exceção nos 2 casos acima??? Teoricamente, os 2 trechos deveriam efetuar exatamente o mesmo tratamento, não???
A impressão q tenho é ao utilizar o throw o código abaixo de chave que fecha o catch não é executado, já quando ocorre a exceção naturalmente, o trecho pós catch é executado normalmente... É isso mesmo?? Mas não deveriam ser iguais os tratamentos??
Se alguém puder esclarecer, ficarei agradecido
Abraços a todos e obrigado...
|
Cassiano Colombo de Oliveira Gil
Analista Programador Junior
São Paulo - SP
E-mail: cassi_ano@hotmail.com
Twiter: http://twitter.com/thundercas |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 09:30:20
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Impressão não é prova. Prove a sua afirmação, executando os trechos de código que você postou.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 09:35:02
|
bKn
Java Ninja
Membro desde: 07/04/2009 15:22:18
Mensagens: 288
Offline
|
Ambos continuam rodando. Não confunda as coisas, você apenas trata a exceção dentro do catch. Lançar uma exceção não é tratar nada.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 09:37:31
|
aleck
GUJ Ranger
![[Avatar]](/images/avatar/2051bd70fc110a2208bdbd4a743e7f79.jpg)
Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline
|
No primeiro caso vc está capturando um erro de execução, no segundo vc está repassando este erro para a classe que chamou o método.
|
Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 09:38:02
|
MaikoID
JavaChild
![[Avatar]](/images/avatar/fb5099b705cbdf454ab869c32d22f029.jpg)
Membro desde: 26/11/2007 23:02:21
Mensagens: 111
Offline
|
Opa agora me veio uma dúvida.
O codigo
È executado ?
Porque se a exception é lancada no parseInt(x); ele não deveria pular a execução para o tratamento da exception ?
abraço.
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 09:38:51
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Rodando seu código, você pode ver que a sua afirmação é incorreta.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 09:40:11
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
MaikoID wrote:Opa agora me veio uma dúvida.
O codigo
È executado ?
Porque se a exception é lancada no parseInt(x); ele não deveria pular a execução para o tratamento da exception ?
abraço.
Conforme você viu no código que você postou, o código será executado porque não houve uma exceção sendo lançada no parseInt (s). (Não há uma variável chamada "x" no seu programa; tomei a liberdade de corrigir).
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 10:13:26
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
aleck wrote:No primeiro caso vc está capturando um erro de execução, no segundo vc está repassando este erro para a classe que chamou o método.
Passando para a classe que chamou?
Olhe isso aqui:
O que está acontecendo?
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:09:35
|
vitor lima
JavaBaby
![[Avatar]](/images/avatar/7d2bb55bb8d4a35025b15eb652920f3d.jpg)
Membro desde: 14/04/2009 09:16:59
Mensagens: 92
Offline
|
Bem, quando você lança uma exeção fazendo
throw new <nomeDaClasseDeExceção>(<argumento> );
é criada uma nova exceção que fica esperando para ser tratada, o que geralmente ocorre
na classe que chamou o método criador da exceção, mas no seu caso, o primeiro lugar em que ela
pode ser tratada é no próprio catch do seu try/catch.
Por isso a exceção não é lançada.
Se você mudar a linha catch ( ClassCastException exc ) {
para por exemplo catch( NumberFormatException z){
a exceção não será tratada, e portanto, será lançada.
Coloquei seu código em um método a parte só para demonstrar no
método main o tratamento da exceção lançada.
public class TestaTryCatch {
public static void main(String[] args ) {
try{
testa();
}catch(Exception e){
System.out.println("Lançamento funcionou!");
}
}
public static void testa(){
try {
throw new ClassCastException( "exemplo " );
} catch ( ArrayIndexOutOfBoundsException exc ) {
System.out.print( exc.getMessage() );
try {
throw new NumberFormatException( "de exceções " );
} catch ( NumberFormatException excn ) {
System.out.print( excn.getMessage() );
try {
throw new ArrayIndexOutOfBoundsException( "aninhadas" );
} catch ( ArrayIndexOutOfBoundsException exca ) {
System.out.println( exca.getMessage() );
}
}
}
}
}
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:20:55
|
aleck
GUJ Ranger
![[Avatar]](/images/avatar/2051bd70fc110a2208bdbd4a743e7f79.jpg)
Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline
|
davidbuzatto wrote:
Passando para a classe que chamou?
Erro meu de interpretação, pensei que o thundercas estava com dúvida no conceito de catch e throw.
De qualquer forma a dúvida dele já foi muito bem respondida pelo vitor lima.
|
Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 30/06/2009 12:55:20
|
vitor lima
JavaBaby
![[Avatar]](/images/avatar/7d2bb55bb8d4a35025b15eb652920f3d.jpg)
Membro desde: 14/04/2009 09:16:59
Mensagens: 92
Offline
|
Quanto a dúvida do cara com uma foto de um cão jogando CS
(bela foto, muito boa mesmo . . .) ,
o MaikoID
" Opa agora me veio uma dúvida.
O codigo
throw new NumberFormatException("Erro");
È executado ?
Porque se a exception é lancada no parseInt(x); ele não deveria pular a execução para o tratamento da exception ?
abraço"
eu fiz o seguinte teste:
[code]
O System.out.println() que está dentro do try não é executado,portanto
a linha de código que lança a exceção também não é.
A execução vai direto para o catch como você havia observado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 31/07/2009 10:13:27
|
MaikoID
JavaChild
![[Avatar]](/images/avatar/fb5099b705cbdf454ab869c32d22f029.jpg)
Membro desde: 26/11/2007 23:02:21
Mensagens: 111
Offline
|
Primeiro nem fui eu postei o código, me confudiram ali em cima.
Segundo vlw pela foto, e isso é um urso, da uma olhada no fucinho aushusahusa!
Terceiro imagina que eu tenha o seguinte codigo
Tem a seguinte saida
run:
Isso sim é um numero sangue bão 1
Numerinho sem vergonha que presta pra porra nenhuma -1
BUILD SUCCESSFUL (total time: 0 seconds)
Digamos eu posso usar as excecoes ao invés de controle por variavel para o controle de fluxo ? Fica muito lento digamos se um método quando dá algum erro de regra de negocio mandar uma exceção ou setar a variável de retorno com -1. e testar com um if depois ?
Exemplificando
Lógico que é um exmplo ridiculo, mas neste caso é preferivel o primeiro metodo pois fica mais legivel. O que eu não sei é se é sacrificado muito desempenho em comparação aos if's do segundo.
Abraço.
ps: criando esses metodos eu aprendi que não é preciso ter um throws na declaração do método para a exception ser tratado no método que o chamou rsrs.
|
 |
|
|
 |
|
|