В языке Java объект исключения всегда является экземпляром класса, производного от Throwable. Как мы вскоре убедимся, если стандартных классов недостаточно, можно создавать и свои собственные классы исключений.
Обратите внимание на то, что хотя все исключения имеют общего предка Throwable, иерархия сразу разделяется на две ветви: Error и Exception.
Иерархия Error описывает внутренние ошибки и ситуации, связанные с нехваткой ресурсов, в системе поддержки выполнения программ. Ни один объект этого типа самостоятельно сгенерировать невозможно. При возникновении внутренней ошибки возможности программиста крайне ограничены. Можно лишь уведомить пользователя и попытаться аккуратно прервать выполнения программы. Такие ситуации достаточно редки.
При программировании на Java основное внимание следует уделять иерархии Exception. Эта иерархия также разделяется на две ветви: исключения, производные от класса RuntimeException, и остальные. Исключения типа RuntimeException возникают вследствие ошибок программирования. Все другие исключения являются следствием непредвиденного стечения обстоятельств, например, ошибок ввода-вывода, возникающих при выполнении вполне корректных программ.
Исключения, производные от класса RuntimeException, связаны со следующими проблемами:
- Неверное приведение типов;
- Выход за пределы массива;
- Попытка обратиться к объекту по ссылке null.
Остальные исключения возникают в следующих случаях:
- Попытка чтения после конца файла;
- Попытка установить соединение, используя неправильный URL;
- Попытка получить объект Class, если в строке указан несуществующий класс.
Исключения RuntimeException практически всегда возникают по вине программиста. Исключения ArrayIndexOutBoundsException можно избежать, если всегда проверять индексы массива. Исключение NullPointerException никогда не возникает, если перед использованием переменной вы проверите, не содержит ли она значение null.
МИР МЕТАЛЛА – молодая и современная металлобаза, рожденная на берегах Волги. Компания «МИР МЕТАЛЛА» оказывает услуги по резке приобретенного металлопроката в размер, нарезке резьбы на водогазопроводной трубе, сварке металлоизделий, рубке и гибке стального листа.
А как насчет неверного URL-адреса? Всегда ли можно обнаружить ошибку заранее? Разные браузеры обрабатывают разные URL-адреса. Например, браузер NetScape может работать с URL-адресами вида mailto:, а программа appletviewer — нет. Следовательно, термин «неправильный» зависит от среды, а не от программы.
В спецификации языка Java любое исключение, производное от класса Error или RuntimeError, называется неконтролируемым(unchecked). Все остальные исключения называются контролируемыми(checked). Для всех контролируемых исключений компилятор проверяет наличие соответствующих обработчиков.
Имя RuntimeException иногда вводит в заблуждение. Разумеется, все ошибки, которые мы обсуждаем, возникают в ходе выполнения программы.