throws ou try/catch ?  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
peerless
GUJ Master
[Avatar]

Membro desde: 22/01/2007 14:52:26
Mensagens: 1391
Localização: Porto Alegre / RS
Offline

Eu estou evitando utilizar throws para não precisar usar try/catch mais pra frente, porém.. fica uma coisa de outro mundo o código, com o monte de try/catch que aparece...

na opinião de vocês, ONDE, QUANDO E PQ usar throws invéz de try ou vice versa?

Abraços!

follow me
pitacos

"The most problems that teams face are about communication, and all the others are too." - Dan North





[MSN]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

Try/catch/finalize = quando a classe for responsável por tratar o dito erro. Se o erro pode ser tratado mais para frente de uma maneira mais comum ao projeto, não utilizo. Ex.: Formatar objetos

Throws = quando o erro não for de responsabilidade da classe, que simplesmente executa e qualquer erro seja tratado mais adequadamente em uma classe própria para isso. Ex.: Acessar de várias maneiras um servidor (seja via sockets ou um post ao servlet), se um falha, joga a exception para frente, tenta da outra maneira e trabalha com o erro gerado.

Só lembrando que é minha opinião sobre isso.
Até!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
heitor.rapcinski
Entusiasta Java
[Avatar]

Membro desde: 01/02/2007 12:49:11
Mensagens: 20
Localização: Curitiba-PR
Offline

Vale lembrar de Exception decendentes de RuntimeException são não verificadas e não precisam estar declaradas na clausula throws do método.

-------------------------------------------------
Heitor Rapcinski
[Email]
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

- throw lanca uma exception
- try pega a exception e faz alguma coisa no no bloco catch (inclusive pode fazer um throw de outra exception).

guando usar? bom, depende do que vc quer. pense em como as suas classes conversam: quando ocorre uma exceção vc vai querer tratar aonde?

[]´s

http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
maquiavelbona
JWizard
[Avatar]

Membro desde: 29/06/2006 09:06:51
Mensagens: 2447
Localização: São Paulo - SP
Offline

heitor.rapcinski wrote:Vale lembrar de Exception decendentes de RuntimeException são não verificadas e não precisam estar declaradas na clausula throws do método.


Têm vezes que RuntimeException deve ser tratado, imagina se num programa de compensação seu, por algum problema de dados do banco ou outro, lança uma ArithmeticException ( divisão por zero dá isso ) ?
Exceptions possivelmente perigosas têm sim que serem tratadas, mesmo unchecked.

Até!

----------------------------------------------------------------
"Within a few years a simple and inexpensive device, readily carried about, will enable one to receive on land or sea the principal news, to hear a speech, a lecture, a song or play of a musical instrument, conveyed from any other region of the globe. "
Nikola Tesla - A means for furthering Peace (1905)

"Gedanken ohne Inhalt sind leer, Anschauungen ohne Begriffe sind blind."
Immanuel Kant - Kritik der reinen Vernunft (1781)
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Dá uma lida nesses artigos:
Lidando com Exceptions (Caelum)
Effective Java Exceptions
Resumo sobre exceções do livro Effective Java.
[WWW]
LPJava
GUJ Hacker

Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline

quando vc ta afim de passar o problema para alguem.. mas lembre-se uma hora alguem tem q tratar o problema gerado.. ao desenrolar da pilha.. alguem vai ter q capturar e tratar.. senao a bomba vai ser lançada para o usuario..

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/
[WWW]
lfreitas
Smalltalk
[Avatar]

Membro desde: 31/01/2008 14:05:37
Mensagens: 1
Localização: Rio de Janeiro
Offline

Muito didática a sua resposta, maquiavelbona. Obrigado!
[WWW] [ICQ]
ricardo.ekm
HelloWorld

Membro desde: 13/03/2008 09:11:13
Mensagens: 12
Offline

É relativamente simples.
Se você sabe tratar o problema cate a exceção com try/catch. Se não souber passe para cima.
jingle
Virtual Machine Man

Membro desde: 04/10/2006 20:40:08
Mensagens: 642
Localização: Canoas/RS
Offline

ricardo.ekm wrote:É relativamente simples.
Se você sabe tratar o problema cate a exceção com try/catch. Se não souber passe para cima.


ahn?

como foi dito antes... vai depender da classe onde está, o tipo de erro e onde você vai querer tratá-lo.
exemplo simples é uma classe contendo regras de negócios onde se por algum acaso a cominicaçao do banco falhar deixe que a classe do banco se encarregue do erro, mas se não chegou um campo que erá pra estar preenchido... trate ela.
[Email] [MSN]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Mais dois ótimos links:
http://sergiotaborda.wordpress.com/java/trabalhando-com-excecoes-conceitos/
http://sergiotaborda.wordpress.com/java/excecoes-boas-praticas-mas-praticas/

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Andre Brito
JWizard

Membro desde: 21/07/2007 17:44:31
Mensagens: 2485
Localização: Paraná
Offline

jingle wrote:
ricardo.ekm wrote:É relativamente simples.
Se você sabe tratar o problema cate a exceção com try/catch. Se não souber passe para cima.


ahn?

como foi dito antes... vai depender da classe onde está, o tipo de erro e onde você vai querer tratá-lo.
exemplo simples é uma classe contendo regras de negócios onde se por algum acaso a cominicaçao do banco falhar deixe que a classe do banco se encarregue do erro, mas se não chegou um campo que erá pra estar preenchido... trate ela.


Ele quis dizer que se você não quiser tratar a exceção (usando try/catch/finalize e apresentando uma mensagem de erro dentro dos catchs), você pode se desviar dela. Eu não entendi muito bem quando li, mas acho bom sempre tratar, afinal, se você sempre "passar pra cima", vai estourar em algum lugar.
Li em algum blog que não é legal fazer muitas exceções. O porquê? Também não entendi... :/

Respondendo ao tópico,
Eu acho que try/catch/finalize você usa dentro do método que tem um comportamento arriscado e o throws você usa no método que está chamando ométodo que tem o comportamento arriscado (aliás, não dá pra confundir throws com throw, coisa que eu sempre faço).

This message was edited 3 times. Last update was at 04/04/2008 07:06:47


Como organizar o GUJ.
Meu Twitter.
Meu blog.
Future proofing means making code easy to change, not trying to anticipate every possible way your code might need to change.
[WWW]
thegoergen
Virtual Machine Man
[Avatar]

Membro desde: 24/09/2007 09:44:03
Mensagens: 583
Localização: Estrela/RS
Offline

Eu geralmente uso try/catch somente nas telas. Porque daí eu posso mostrar o erro ao usuário (a não ser que o erro seja daquele "macabros", que o usuário possa se assustar. ). Quando é nas classes mais internas eu lanço sempre, para a lógica não ficar muito confusa, com vários tratamentos no meio...

"A preguiça de pensar é a maior burrice de uma pessoa." (Diego Inácio Goergen)

CV: Diego Inácio Goergen

Administrador da UNISCWiki e Medicina UNISC
[WWW] [MSN] [ICQ]
ricardo.ekm
HelloWorld

Membro desde: 13/03/2008 09:11:13
Mensagens: 12
Offline

Deixe-me detalhar melhor o que falei então.
Aconteceu uma exceção e sua classe não sabe o que fazer com ela. nesse caso repasse a exceção através de throws. Você não tem como se recuperar da exceção ou não sabe tratá-la então não tem o que fazer, sua única alternativa é repassar. Um try catch vazio é na maioria dos casos um anti-pattern. Para mais sobre isso pesquisar sobre swallow exception.

Se ninguém souber tratar vai subir até o topo da pilha na qual é recomendável um try/catch global, e dependendo do software você loga, exibe mensagem para o usuário, faz um clean-up geral etc e depois fecha o aplicativo, pois é perigoso continuar sendo que aconteceu algo que você não sabe se recuperar ou tratar.

Em sistemas grandes é bom ter um try/catch global para cada subsistema assim caso aconteça alguma falha em um deles os outros continuam funcionando.

Espero que tenha esclarecido

ricardo.ekm
HelloWorld

Membro desde: 13/03/2008 09:11:13
Mensagens: 12
Offline

jingle wrote:
ricardo.ekm wrote:É relativamente simples.
Se você sabe tratar o problema cate a exceção com try/catch. Se não souber passe para cima.


ahn?

como foi dito antes... vai depender da classe onde está, o tipo de erro e onde você vai querer tratá-lo.
exemplo simples é uma classe contendo regras de negócios onde se por algum acaso a cominicaçao do banco falhar deixe que a classe do banco se encarregue do erro, mas se não chegou um campo que erá pra estar preenchido... trate ela.


O que a classe do banco deve fazer se a comunicação com o banco falhar?
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team