s. Если вы когда-либо думали, что вам нужно, просто дайте времени выполнения сделать это, а не использовать
ал о непроверенных и проверенных вопросах, ни один из интернет-ресурсов не был по-настоящему ясен о разнице и когда использовать оба.
Из того, что я понимаю, оба они генерируются во время выполнения, оба представляют состояния программы, которые находятся за пределами ожидаемых границ логики, но проверенные исключения должны быть явно перехвачены, а непроверенные - нет.
Мой вопрос, предположим, ради аргумента у меня есть метод, который делит два числа
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 немедленно проверять наличие неподходящих значений или внутренняя логика должна перехватывать их во время вычисления и генерировать исключения.