Я читал о непроверенных и проверенных вопросах, ни один из интернет-ресурсов не был по-настоящему ясен о разнице и когда использовать оба.
Из того, что я понимаю, оба они генерируются во время выполнения, оба представляют состояния программы, которые находятся за пределами ожидаемых границ логики, но проверенные исключения должны быть явно перехвачены, в то время как непроверенные - нет.
У меня такой вопрос, предположим, ради аргумента, у меня есть метод, который делит два числа
double divide(double numerator, double denominator)
{ return numerator / denominator; }
и метод, который требует где-то деления
void foo()
{ double a = divide(b, c); }
Кто отвечает за проверку случая, когда знаменатель равен нулю, и следует ли проверять или снимать исключение (игнорируя встроенные в Java проверки деления)?
Итак, будет ли объявлен метод деления как есть или как
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)
{}
}
или без проверенного исключения, как:
double divide(double numerator, double denominator)
{
if(denominator == 0) throw DivideByZeroException
else ...
}
void foo()
{
if(c != 0)
double a = divide(b, c);
}
и разрешить foo сделать проверку деления на ноль?
Эта проблема первоначально возникла в написанной мной математической программе, в которой пользователи вводили числа, а логические классы выполняли вычисления. Я никогда не был уверен, должен ли GUI немедленно проверять наличие неправильных значений или внутренняя логика должна их перехватывать во время вычислений и генерировать исключения.