Esclarecimento de exceção Java não verificado / verificado

Eu tenho lido sobre perguntas não verificadas versus verificadas, nenhum dos recursos on-line foi realmente claro sobre a diferença e quando usar as duas.

Pelo que entendi, os dois são lançados em tempo de execução, ambos representam estados de programa que estão fora dos limites esperados da lógica, mas as exceções verificadas devem ser explicitamente capturadas, enquanto as desmarcadas não.

Minha pergunta é, suponha que, por uma questão de argumento, eu tenha um método que divida dois números

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

e um método que requer divisão em algum lugar

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

Quem é responsável por verificar se o denominador é zero e uma exceção deve ser verificada ou desmarcada (ignorando as verificações de divisões incorporadas do Java)?

Portanto, o método de divisão seria declarado como é ou 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)
    {}
}

ou sem uma exceção marcada, como é:

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

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

e permitir que foo faça a divisão por zero check?

Esse problema surgiu originalmente em um programa matemático que escrevi no qual os usuários inseriam números e as classes lógicas realizavam cálculos. Eu nunca tinha certeza se a GUI deveria verificar imediatamente se havia valores impróprios ou se a lógica interna deveria capturá-los durante o cálculo e lançar exceções.

questionAnswers(6)

yourAnswerToTheQuestion