Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

¿Por que no imprime Fin metodo 1?

Buena noche

Por favor me explican por que el código no imprime fin del método 1, se ve que el flujo salta desde el método 2 hasta el método main y no entiendo, ¿ si el valida en el método 1 el inicio y lo imprime por que este no imprime el fin del método 1 ?. Muchas gracias.

import flujo.MyException;

public class Flujo3 {

public static void main(String[] args) {

    System.out.println("Inicio metodo main");

    try{ 
        metodo1();
    }catch(ArithmeticException | NullPointerException | MyException
            ex) {
        String message = ex.getMessage();

        System.out.println("Exception " + message);
        ex.printStackTrace();

    }

    System.out.println("Fin metodo main");
}

public static void metodo1(){

    System.out.println("Inicio metodo 1");
    metodo2();
    System.out.println("Fin metodo 1");
}

 public static void metodo2(){

     System.out.println("Inicio metodo 2");

     throw new MyException("surgio un error");
 }

}


debug: Inicio metodo main Inicio metodo 1 Inicio metodo 2 flujo.MyException: surgio un error Exception surgio un error Fin metodo main at Flujo3.metodo2(Flujo3.java:35) at Flujo3.metodo1(Flujo3.java:27) at Flujo3.main(Flujo3.java:11) BUILD SUCCESSFUL (total time: 0 seconds)

1 respuesta

¡Hola Carlos!

El problema es que el método 2 lanza una excepción y no hay un bloque try-catch para manejarla en el método 1. Cuando se lanza la excepción, el flujo salta de inmediato al bloque catch en el método main, y no se ejecuta el resto del código en los métodos 1 y 2.

Para solucionar esto, debes agregar un bloque try-catch en el método 1 para manejar la excepción lanzada por el método 2. De esta manera, el método 1 podrá imprimir "Fin método 1" antes de que el flujo salte al bloque catch en el método main.

Aquí te muestro cómo quedaría el código:

public static void metodo1(){ System.out.println("Inicio método 1"); try { metodo2(); } catch (MyException ex) { String message = ex.getMessage(); System.out.println("Exception " + message); ex.printStackTrace(); } System.out.println("Fin método 1"); }

Espero que esto te ayude a entender el problema. ¡Buenos estudios!