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;
}
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);
}
}
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.