Java

Почему неконтролируемые исключения не требуют обязательной обработки? Java.

Из иерархии исключений Java есть ветвь Error - их можно не обрабатывать, т. к. например если случится ошибка виртуальной машины и программа закроется, то до обработчика дело не дойдёт. А вот есть ещё одна ветвь uncheked исключений RuntimeException, объясните пожалуйста, почему её не обязательно обрабатывать, ведь например деление на ноль можно предугадать. обработать и программа продолжит свою нормальную работу? И вопрос номер два: Почему исключения типа IOException Относятся к проверяемым на этапе компиляции? - если пользователь программы может вводить путь файла во время выполнения программы. Не судите строго,, если написал где-то не так как есть на самом деле, пожалуйста исправьте!) Спасибо!.
RuntimeException просто нет необходимости перехватывать, но такая возможность имеется. Например IllegalArgumentException, если переданный параметр в функцию имеет неверное значение. Вы же не будете теперь подобные исключения вылавливать try catch, но тем не менее в случае какой-то логической ошибки вы захотите, чтобы программа выкинула это исключение, чтобы вы могли сразу её легко отследить, вместо того, чтобы потом искать, почему программа работает неверно. Вы, как программист, просто знаете, что функцию используете по назначению, но подобное исключение сигнализирует, что ошибка именно в коде. IOException есть потребность обрабатывать, потому что подобная ошибка возможна, и это не программная ошибка, и пользователь должен о ней получить информацию тем или иным образом, вместо того, чтобы программа просто грохнулась. RuntimeException же говорит об ошибке в самой программе, с которой программа не может и не должна работать. Её просто не должно там быть.

Если всё ещё не понятно, могу привести конкретный пример.
Павел Диков
Павел Диков
85 786
Лучший ответ
Виктор Любимов Было бы здорово, если бы привели пример!
>Почему исключения типа IOException Относятся к проверяемым на этапе компиляции? - если пользователь программы может вводить путь файла во время выполнения программы.
а почему проверка на этапе компиляции?
на этапе компиляции, проводится проверка синтаксиса
Виктор Любимов если не ошибаюсь, то из определения checked исключения - исключения провереямые компилятором, а IOException - checked
А вот есть ещё одна ветвь uncheked исключений RuntimeException, объясните пожалуйста, почему её не обязательно обрабатывать, ведь например деление на ноль можно предугадать. обработать и программа продолжит свою нормальную работу?
не обязательно и не нужно это разные вещи, если ты можешь предугадать исключение деления на 0 то можешь его обрабатывать никто тебе не запрещает.
Паша Хломко
Паша Хломко
1 556
все через опу в жабе. на андроиде может слететь и вообще не вытянешь что случилось