Tratamento de erro

Olá!

Estou com um problema no tratamento de erros e lançamento, em meu código. Que eu não estou conseguindo realizar direito. ´Vou colocar o enunciado e o código.

Escreva um programa no qual o main() chama metodoA(), que chama metodoB(), que
chama metodoC(), que chama metodoD(). Inclua código em metodoD() que dispara uma
exceção, que é capturada por metodoA(), após metodoC() e metodoB() propagarem-na.
Para cada método, inclua comandos de saída que indiquem quando o método inicia e
quando o ele retorna.

identar texto pré-formatado por 4 espaços

package propagacaoDeErros;

public class PropagacaoDeErros {

public static void main(String[] args) {

	System.out.println("main");
	try {
		metodoA(); // ponto onde ocorre a excecao
	} catch (java.lang.Error ex) { // Captura do erro
		System.err.println(ex.getMessage());
	}
	System.out.println("Última instrução do main.");

}

public static void metodoA() {

	System.out.println("Metodo A!");

	metodoB(); // ponto onde ocorre a excecao
}catch(

java.lang.Error ex)
{ // Captura do erro
	System.err.println(ex.getMessage());
}System.out.println("Metodo B executado!");
}

public static void metodoB() {

	System.out.println("Metodo B!");
	metodoC(); // ponto onde ocorre a excecao
	System.out.println("Metodo C executado!");

}

public static void metodoC() {

	System.out.println("Metodo C!");

	metodoD(); // ponto onde ocorre a excecao
	System.out.println("Metodo D executado!");

}

public static void metodoD() {

	int a = 0;
	int b = 1;

	b = b / a;

}

}

1 curtida
package exercicios;

/**
 *
 * 
 */
public class Teste
{
    public static void main(String[] args) 
    {
         System.out.println("main");
         
         try{
             metodoA();
             
         }
         catch(Exception e)
         {
             System.out.println("Erro ao executar o metodo metodo A");
         }
         
         

    }
    
    public static void metodoA()
    {
        System.out.println("metodo A");
        
       try
       {
           System.out.println("Chamando o Metodo B");
           metodoB();
           
       }
       catch(Exception e)
       {
           System.out.println("Metodo B nao executado");
       }
    }
    
    public static void metodoB()
            
    {
        System.out.println("metodo C");
        
        try{
              metodoC();
              System.out.println("Metodo c a executar");
        }
      
        
        catch(Exception e)
        {
            System.out.println("Erro ao executar metodo C");
        }
    }
    
              
    public static void metodoC()
            
    {
        System.out.println("Metodo c");
        
        try{
             metodoD();
         
                System.out.println(" Metodo D executado");
        }
        catch(Exception e)
        {
            System.out.println("Erro ao executar metodo D em C");
        }
        
        
    }
    
    public static void metodoD()
    {
        float a =0;
        float b = 1;
        b = b /a;
        
        System.out.println(""+b);
        
        //System.out.println(""+a+""+b);
    }
    
}

Aparentemente seu código está certo.
Não está tendo o comportamento esperado?

O meu não, a questão pedia que eu colocasse as exceções e ela disse que eu estava fazendo tratamento do erro que deve existir apenas no método A…

Obrigado…

Olá Isaura!

Bom dia!
Muito obrigado pela a ajuda!

Ewerton

Ah, desculpa eu vi o código da @Isaura_Antonio, achando que era o seu.
:see_no_evil:

Tudo bem…

Recebi a seguinte recomendação:

Questão 2 - Você deveria ter lançado a exceção no método D (o que você deixou lá foi um erro de compilação). Além disso os métodos B e C deveriam relançar a exceção lançada pelo método D (usando throws) e não tratar (usando try-catch). Por fim, o main não precisa do try-catch , pois o método A faz o tratamento da exceção.