Java sin marcar / comprobado aclaración de excepciones

He estado leyendo sobre preguntas no verificadas versus verificadas, ninguno de los recursos en línea ha sido realmente claro sobre la diferencia y cuándo usar ambos.

De lo que entiendo, ambos se lanzan en tiempo de ejecución, ambos representan estados de programa que están fuera de los límites esperados de la lógica, pero las excepciones marcadas deben capturarse explícitamente mientras que las no marcadas no lo hacen.

Mi pregunta es, supongo que por el argumento tengo un método que divide dos números

double divide(double numerator, double denominator)
{    return numerator / denominator;    }

y un método que requiere división en alguna parte

void foo()
{    double a = divide(b, c);    }

¿Quién es responsable de verificar el caso de que el denominador sea cero, y se debe verificar o desmarcar una excepción (ignorando las comprobaciones de división integradas de Java)?

Entonces, ¿se declararía el método de división como es o como

double divide(double numerator, double denominator) throws DivideByZeroException
{
    if(denominator == 0) throw DivideByZeroException
    else ...
}

void foo()
{
    try{
        double a = divide(b, c);
    }
    catch(DivideByZeroException e)
    {}
}

o sin una excepción marcada, como es:

double divide(double numerator, double denominator)
{
    if(denominator == 0) throw DivideByZeroException
    else ...
}

void foo()
{
    if(c != 0)
       double a = divide(b, c);
}

y permitir que foo haga la división por cero?

Este problema surgió originalmente en un programa matemático que escribí en el que los usuarios ingresaban números y las clases lógicas realizaban cálculos. Nunca estuve seguro de si la GUI debería verificar inmediatamente los valores incorrectos, o si la lógica interna debería detectarlos durante el cálculo y generar excepciones.

Respuestas a la pregunta(6)

Su respuesta a la pregunta