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
}
}
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
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
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
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.
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,