Spec-Zone .ru
спецификации, руководства, описания, API
|
Допустимый код языка программирования Java должен соблюдать Выгоду или Определить Требование. Это означает, что кодируют, который мог бы выдать определенные исключения, должен быть включен любым из следующего:
try
оператор, который ловит исключение. try
должен обеспечить обработчик для исключения, как описано в Ловли и Обработке Исключений.throws
пункт, который перечисляет исключение, как описано в Определении Исключений, выданных Методом.Код, который не в состоянии соблюдать Выгоду или Определить Требование, не будет компилировать.
Не все исключения подвергаются Выгоде или Определяют Требование. Понять, почему, мы должны смотреть на три основных категории исключений, только одно из которых подвергается Требованию.
Первый вид исключения является проверенным исключением. Они - исключительные условия, которые правильно написанное приложение должно ожидать и восстановиться с. Например, предположите, что приложение запрашивает пользователя входное имя файла, затем открывает файл, передавая имя к конструктору для java.io.FileReader
. Обычно, пользователь обеспечивает имя существующего, читаемого файла, таким образом, конструкция FileReader
объект успешно выполняется, и выполнение приложения обычно продолжается. Но иногда пользователь предоставляет имя несуществующего файла, и броски конструктора java.io.FileNotFoundException
. Правильно написанная программа поймает это исключение и уведомит пользователя ошибки, возможно запрашивающей исправленное имя файла.
Проверенные исключения подвергаются Выгоде или Определяют Требование. Все исключения являются проверенными исключениями, за исключением обозначенных Error
, RuntimeException
, и их подклассы.
Второй вид исключения является ошибкой. Они - исключительные условия, которые являются внешними к приложению, и что приложение обычно не может ожидать или восстанавливаться с. Например, предположите, что приложение успешно открывает файл для ввода, но неспособно считать файл из-за системного неправильного функционирования или аппаратных средств. Неудачное чтение бросит java.io.IOError
. Приложение могло бы хотеть ловить это исключение, чтобы уведомить пользователя проблемы — но также могло бы иметь смысл для программы печатать трассировку стека и выход.
Ошибки не подвергаются Выгоде или Определяют Требование. Ошибки являются теми исключениями, обозначенными Error
и его подклассы.
Третий вид исключения является исключением на этапе выполнения. Они - исключительные условия, которые являются внутренними к приложению, и что приложение обычно не может ожидать или восстанавливаться с. Они обычно указывают на ошибки программирования, такие как логические ошибки или неправильное использование API. Например, рассмотрите заявление, описанное ранее, который передает имя файла конструктору для FileReader
. Если логическая ошибка вызывает a null
чтобы быть переданным конструктору, конструктор бросит NullPointerException
. Приложение может поймать это исключение, но, вероятно, имеет больше смысла устранять ошибку, которая заставила исключение происходить.
Исключения на этапе выполнения не подвергаются Выгоде или Определяют Требование. Исключения на этапе выполнения - обозначенные RuntimeException
и его подклассы.
Ошибки и исключения на этапе выполнения все вместе известны как исключения непроверенные.
Некоторые программисты рассматривают Выгоду или Определяют Требование серьезный дефект в механизме исключения и обходят это при использовании исключений непроверенных вместо проверенных исключений. Вообще, это не рекомендуется. Раздел Исключения Непроверенные — Противоречие говорит о том, когда уместно использовать исключения непроверенные.