Ответ 1
Ошибка "указывает на серьезные проблемы что разумное применение должно не пытайтесь поймать".
а
Исключение "указывает условия что разумное приложение может хочу поймать".
Ошибка вместе с RuntimeException
и их подклассы являются unchecked
исключениями. Все остальные классы исключений являются checked
исключениями.
Проверенные исключения - это, как правило, те, из которых программа может восстановить, и может быть хорошей идеей оторваться от таких исключений программно. Примеры включают FileNotFoundException
, ParseException
и т.д. Ожидается, что программист проверяет эти исключения, используя блок try-catch или отбрасывая его обратно вызывающему абоненту
С другой стороны, мы имеем непроверенные исключения. Это те исключения, которые могут не произойти, если все в порядке, но они действительно происходят. Примеры включают ArrayIndexOutOfBoundException
, ClassCastException
и т.д. Многие приложения будут использовать предложение try-catch
или throws
для RuntimeExceptions
и их подклассы, но с точки зрения языка это не требуется. Обратите внимание, что восстановление из RuntimeException
вообще возможно, но ребята, которые разработали класс/исключение, считали ненужным для конечного программиста проверку таких исключений.
Ошибки также являются исключенными, и программисту не требуется ничего с ними делать. На самом деле это плохая идея использовать предложение try-catch
для ошибок. Чаще всего восстановление из ошибки невозможно, и программе должно быть разрешено завершить работу. Примеры включают OutOfMemoryError
, StackOverflowError
и т.д.
Обратите внимание, что хотя ошибки являются неконтролируемыми исключениями, мы не должны пытаться с ними справиться, но нормально работать с RuntimeExceptions
(также непроверенными исключениями) в коде. Проверенные исключения должны обрабатываться кодом.