2
respuestas

Excepciones (Pila de ejecución con el metodo depositar())

buenas noches, tengo este codigo:

public class flujo {

public static void main(String[] args) {
    System.out.println("Inicio del main");
    try {
        metodo1();
    } catch(ArithmeticException | NullPointerException  ex) {
        String msg = ex.getMessage();
        System.out.println("ArithmeticException " + msg);
        ex.printStackTrace();
    }
    System.out.println("Fin del main");
}

private static void metodo1() {
    System.out.println("Inicio del metodo1");
    try {
        metodo2();
    } catch(ArithmeticException ex) {
        String msg = ex.getMessage();
        System.out.println("ArithmeticException " + msg);
        ex.printStackTrace();
    }
    System.out.println("Fin del metodo1");
}

private static void metodo2() {
    System.out.println("Inicio del metodo2");
    for(int i = 1; i <= 5; i++) {
        System.out.println(i);
        Cuenta c = null;
        c.depositar();
        try{
            int num = i/0;
            System.out.println(num);
        } catch(ArithmeticException ex) {
            String msg = ex.getMessage();
            System.out.println("ArithmeticException " + msg);
            ex.printStackTrace();
    }
    System.out.println("Fin del metodo2");
}

}

}

y tengo la siguiente clase Cuenta segun lo que indican en el tema dos del curso de Excepciones:

public class Cuenta {

void depositar(){
  // TODO document why this method is empty
}

}

y me arroja el siguiente resultado:

Inicio del main Inicio del metodo1 Inicio del metodo2 1 ArithmeticException Cannot invoke "Pila_De_Ejecucion.Cuenta.depositar()" because "c" is null java.lang.NullPointerException: Cannot invoke "Pila_De_Ejecucion.Cuenta.depositar()" because "c" is null at Pila_De_Ejecucion.flujo.metodo2(flujo.java:34) at Pila_De_Ejecucion.flujo.metodo1(flujo.java:20) at Pila_De_Ejecucion.flujo.main(flujo.java:8) Fin del main

porque me esta dando este resultado? si es el resultado que deberia darme?

2 respuestas

¡Hola Danny, espero que estés bien!

El resultado que estás obteniendo se debe a un error en tu código. En el método metodo2(), estás creando una instancia de la clase Cuenta llamada c, pero no le estás asignando ningún valor, por lo que su valor es null. Luego, intentas llamar al método depositar() de la instancia c, pero como es null, se produce una excepción de tipo NullPointerException. No es posible ejecutar métodos de una instancia vacía, por eso tienes la excepción.

Para solucionar este problema, debes asegurarte de crear una instancia válida de la clase Cuenta y asignarla a la variable c antes de llamar al método depositar(). Por ejemplo:

    Cuenta c = new Cuenta();
    c.depositar();

Al crear una instancia válida de Cuenta, ya no se producirá la excepción NullPointerException y podrás llamar al método depositar() sin problemas.

Y también es una excepción que puede ocurrir visto el catch presente en el método main, entonces ella es la primera en ocurrir y el código ya muestra esa excepción. El segundo error que puede disparar la excepción es el código siguiente al c.depositar() que realiza una división por cero.

Espero haber ayudado y buenos estudios!

Muchisismas gracias por tu respuesta pero es que en el ejemplo de la parte donde nos toca hacer las clases aparece así:

Cuent c = null;