Metodo - throws Exception ou try/Catch?

e ae Galera ?

quando um metodo tem que declarar throws Exception e quando tem q declarar try/catch ?

Ex.

public void meuMetodo() throws Exception{}
public void meuMetodo(){
try{
//Código qualquer
}catch(Exception erro){
//Tratamento qualquer
}
}

Valew

Voce decide… se colocar o throws Exception, nao precisa do try-catch.

Geralmente isso vai do design da tua aplicacao. Pessoalmente centralizo as chamadas a partir de um unico ponto, colocando esta chamada dentro de um try-catch, enquanto todo o resto dos metodos usam throws Exception. Dessa forma, nao preciso ficar colocando try-catch em todo canto, e - pelo menos da forma como faco - fica mais facil gerenciar os erros.

Mas, como disse, isso vai muito de pessoa para pessoa. A unica coisa que nao pode-se fazer eh colocar throws Exception em todos os metodos e depois dar um try-catch vazio :stuck_out_tongue:

Rafael

Propagar exceptions a torto e a direito tambem nao eh uma boa, pq vc acaba colocando throws Exception em tudo quanto eh metodo. Especializar as excecoes e trata-las nos lugares certos eh essencial pra uma aplicacao facil de manter :wink:

centralizar o tratamento de excecoes num ponto unico nunca eh legal, pois voltamos a era do ON ERROR.

eh como o carlos falou, trate-a no devido lugar. voce nao deve tambem sempre tratar no momento que ela eh lancada, pois as vezes voce soh esta prestando um servico, e quem te chamou eh que deve tomar a decisao do que fazer no caso de dar errado.

mas realmente eh muito dependente da aplicacao. aplicacoes web costumam centralizar o tratamento de excecoes, ja que eh dificil resolver um problema como banco de dados caido, null pointer, etc. mas varia muito

…e isso eh um problema serio, IMHO: numa aplicacao web qqer, a chance de alguma coisa errada acontecer eh bem grande, especialmente quando vc passa entre mais de duas camadas de rede a cada ciclo request-response (a primeira camada sendo browser/webserver e a outra webserver/banco).

Como nao eh nada incomum ver aplicacoes web grandes com ateh 5 ou 6 camadas (browser, webserver, webcontainer, application server, middleware, mainframe e banco de dados, por exemplo), jah dah pra imaginar a confiabilidade ridicula que um sistema desses, feito com tratamento de erros ruim, oferece :smiley:

Se vc for pensar, mesmo a queda de uma conexao com o banco de dados nao eh um erro fatal - dependendo de como vc esta se conectando ao banco, da pra tentar conectar de novo e/ou buscar os dados em um servidor de reserva e/ou mostrar apenas os dados mais cruciais, coisas read-only, por exemplo.

Especializar seria algo como:

try {
...
}	catch(Exception ex) {
	throw MinhaException(ex);
}

???

Até.

nao sei se foi isso que o carlos quis dizer, mas especializar = extender

class MinhaExceptionDeBancoDeDados extends SQLException

em vez de extender apenas Excepotiion ou Throwable, pois ai vira try-catch hell, e se seu problema tem algo com alguma api ja existente, aproveite as excecoes dela. Por isso eh sempre bom extender IOException e essas outras classicas. Quem ja der um try catch nisso, pega a sua tambem (claro que precisa fazer algum sentido,