Imprimir
Categoría: Java
Visto: 8627

En PC Resumen vamos a hablar del funcionamiento de la sentencia throws en Java. Si un método es capaz de causar una excepción que él mismo no puede manejar, debe especificarse el comportamiento de forma que los métodos que llamen a este método puedan protegerse de la excepción. Para hacerlo debe incluir una cláusula throws a la declaración del método. Esta cláusula da un listado de los tipos de excepciones que puede tirar. Si no se declara se provoca un error en tiempo de compilación. La lista de excepciones debe ir separada por comas.

Fijémonos en el siguiente código:

import java.util.InputMismatchException;
import java.util.Scanner;

class DivisionEntreZeroAmbtractamentExcepcions {
    public static int cociente(int numerador, int denominador) throws ArithmeticException {
        return numerador / denominador; // posible división por cero
    }
    
    public static void main(String args[]) {
        Scanner explorador = new Scanner(System.in); // objeto Scanner para la entrada
        boolean continuar = true; // determina si se necesitan más datos de entrada
        do {
            try {
                System.out.print("Introduce un numerador entero: ");
                int numerador = explorador.nextInt();
                System.out.print ("Introduce un denominador entero: ");
                int denominador = explorador.nextInt();
                int resultado = cociente(numerador, denominador);
                System.out.printf ("\nResultado: %d / %d =% d\n", numerador, denominador, resultado);
                continuar = false; // entrada exitosa;
            } catch (InputMismatchException inputMismatchException) {
                System.err.printf("\nExcepción: %s \n",
                inputMismatchException);
                explorador.nextLine(); // descarta entrada para probar de nuevo
                System.out.println ("Introduce enteros. \n");
            } // fin de bloque catch
            catch (ArithmeticException arithmeticException) {
                System.err.printf ("\nExcepción: %s \n", arithmeticException);
                System.out.println ("Zero no es un denominador válido. \n");
            }
        } While (continuar);
    }
}

En el método cociente ponemos throws ArithmeticException. Esta cláusula especifica la excepción que tira el método. La cláusula aparece después de la lista de parámetros del método y antes de su cuerpo.

Un método puede lanzar excepciones de las clases que se listen en la cláusula throws o en la de sus subclases. Hemos puesto esta cláusula para indicar al resto del programa que este método puede lanzar una excepción ArithmeticException. De este modo los usuarios de este método se les informa que este método puede lanzar la excepción.

Se debe entender que cuando cociente tira la excepción el método termina, no devuelve nada y las variables locales quedan fuera del alcance y se destruyen. Si este método contiene variables locales que sean referencias a objetos y no hay otras referencias a estos objetos, estos se marcan para la recolección de basura.