Dúvida em try{} catch{}

Tenho uma dúvida,

Para que eu possa ter uma melhor localização dos meus erros, não seria mais viável utilizar try{} catch{} em todos os locais que possam ter exceções ao invés de trows, pois o trows me aponta o erro na classe que invocou o método em que ocorreu o erro e não na classe em que ocorreu realmente.

Vc usa throws apenas qdo o metodo em questao NAO irá ser o responsavel por tratar a excecao. Ele delega isso pra quem o chamar.

ty/catch é qdo vc quer tratar.

o throws é muito utilizado quando desenvolvemos sistemas em camadas cara… vc trata a exceção somente na camada mais alta, onde é permitida variações de tratamento, sendo transparente aos futuros desenvolvedores o que vc fez nas classes mais baixas… Resumindo, o cara vai poder tratar tuas classes sem realmente saber como elas funcionam… Fora muitas outras facilidades…

A minha dúvida é a seguinte:

public void metodo1(){
   try{
      metodo2();
   }catch (Exception e){
      JOptionPane.showMessageDialog(null,e.getMessage());
   }
public void metodo2() throws Exception{
    metodo3();
}
public void metodo3() throws Exception{
    metodo4();
}
public void metodo4() throws Exception{
    int a = 5/0;
}

Se eu fizer dessa forma, o NetBeans irá me apontar que o erro aconteceu na chamada do método 2, só que eu não se em qual método o erro realmente aconteceu, se foi no método 3 ou no método 4, dificultando a localização do mesmo.

oi

como disseram, caso o seu método seja responsável por tratar a excessão ele deve usar o try/cath

[code]public void metodo4() {
try {
int a = 5/0;
}
catch(ExcessaoLancadaPeloMetodo4 e) {

    }

} [/code]

caso contrário ele passa a bola para quem chamou

public void metodo4() throws ExcessaoLancadaPeloMetodo4{ int a = 5/0; }

para saber se deve ou não tratar pense nas suas classes como pertencentes a camadas, por exemplo, uma classe de negócio deve tratar excessões de negócio e não de banco de dados por exemplo…

Oi 504843,

Se vc utilizar o método [b]e.getMessage()[/b] como fêz, vc não irá saber onde exatamente ocorreu o erro; mas se você pedir para a JVM mostra o pilha de erros ( StackTace ) vc verá que a linha onde ocorreu o erro será apresentada, veja a seguir:

java.lang.ArithmeticException: / by zero at br.com.tsi.sispat.gerenciador.Teste.metodo4(Teste.java:25) at br.com.tsi.sispat.gerenciador.Teste.metodo3(Teste.java:21) at br.com.tsi.sispat.gerenciador.Teste.metodo2(Teste.java:17) at br.com.tsi.sispat.gerenciador.Teste.metodo1(Teste.java:8) at br.com.tsi.sispat.gerenciador.Teste.main(Teste.java:30)

O erro ocorreu na linha 25 no método br.com.tsi.sispat.gerenciador.Teste.metodo4.

Acho que vc está na verdade querendo controlar a apresentação dos erros através de uma janela, se for isso que vc quer te aconselho a utilizar o método e.getStackTrace(), ele lhe fornece um array com as linhas que descreve a StackTrace.

[]'s

Muito obrigado pessoal. Matei minha dúvida.