Первый тип исключения - это проверенное исключение. Это исключительные условия, которые хорошо ожидаемое приложение должно предвидеть и восстанавливать. Например, предположим, что приложение запрашивает у пользователя имя входного файла, а затем открывает файл, передавая имя конструктору для java.io.FileReader. Обычно пользователь предоставляет имя существующего доступного для чтения файла, поэтому создание объекта FileReader завершается успешно, и выполнение приложения продолжается в обычном режиме. Но иногда пользователь указывает имя несуществующего файла, и конструктор создает исключение java.io.FileNotFoundException. Хорошо написанная программа поймает это исключение и уведомит пользователя об ошибке, возможно, запросив исправленное имя файла.
Проверенные исключения подпадают под требование Catch или Specify . Все исключения являются проверенными исключениями, за исключением тех, которые указаны в Error, RuntimeException и их подклассах.
Вторым типом исключения является ошибка. Это исключительные условия, внешние по отношению к приложению, которые приложение обычно не может предвидеть или восстанавливать. Например, предположим, что приложение успешно открывает файл для ввода, но не может прочитать файл из-за аппаратного или системного сбоя. При неудачном чтении возникнет ошибка java.io.IOError. Приложение может решить перехватить это исключение, чтобы уведомить пользователя о проблеме, но для программы также может иметь смысл напечатать трассировку стека и выйти.
Ошибки не подпадают под требование Catch или Specify . Ошибки - это исключения, указанные в Error и ее подклассах.
Третий тип исключения - это исключение во время выполнения. Это исключительные условия, которые являются внутренними для приложения, и которые приложение обычно не может ожидать или восстанавливать. Они обычно указывают на программные ошибки, такие как логические ошибки или неправильное использование API. Например, рассмотрим приложение, описанное ранее, которое передает имя файла конструктору для FileReader. Если логическая ошибка приводит к передаче нулевого значения в конструктор, конструктор генерирует исключение NullPointerException. Приложение может перехватить это исключение, но, вероятно, имеет больше смысла устранить ошибку, вызвавшую возникновение исключения.
Исключения во время выполнения не подпадают под требования Catch или Specify . Исключения времени выполнения - это те, которые указаны в RuntimeException и его подклассах.