Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
139
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

А.8 Последнее предупреждение

Мы должны снова предупредить вас о том, что конкретная схема стыковки, описанная здесь, в будущем обязательно изменится. Улучшения могут произойти как в плане реализации, так и на концептуальном уровне. Схема стыковки с C++ будет обладать другими характеристиками, и, возможно, повлечет за собой изменения в схеме стыковки с C, сохраняя, однако, совместимость. Кроме того, создатели будущих сред разработки могут вообще отказаться от использования всех принципов, примененных в данной схеме. Мы надеемся, что в любом случае приведенный здесь материал поможет вам понять некоторые общие аспекты, возникающие при стыковке различных языков программирования, и освоить схему связывания родных методов, которая будет использоваться в вашей системе.

Приложение б Runtime-исключения в Java

Компьютер не бывает эмоциональным. Он может дать точное математическое описание, но забудет об интонации. Фрэнк Заппа

Runtime-система Java возбуждает исключения двух основных видов: runtime-исключения, расширяющие класс RuntimeException, и ошибки, которые расширяют класс Error. Исключения обоих видов являются непроверяемыми (см.раздел7.3). Верхняя часть иерархии исключений выглядит следующим образом:

Исключения Error сигнализируют об очень серьезных проблемах, после которых программа обычно завершается, и которые никогда (или почти никогда) не должны перехватываться. Исключения Error не являются расширениями RuntimeException, так что программист, пытающийся написать универсальное условие catch для перехвата всех исключений Exception и RuntimeException (обычно делать этого не следует) не сможет перехватить исключения Error. Разумеется, после возникновения любого исключения будут выполнены условия finally операторов try, так как все исключения, в том числе и Error, просматривают стек вызовов. Следовательно, вы всегда сможете выполнить необходимые завершающие действия.

Программист может самостоятельно расширить классы RuntimeException и Error, чтобы создать свои собственные варианты непроверяемых исключений— то есть таких исключений, которые можно возбуждать без указания их в условии throws. Мы сообщаем об этом по единственной причине— чтобы вы знали, что этого делать не следует. Условие throws предусмотрено именно для того, чтобы при вызове метода были видны все возможные аспекты его поведения. Порождая свое исключение от RuntimeException или Error, вы сообщаете о нем ложные сведения (будто оно запускается runtime-системой). Кроме того, другие разработчики, читающие вашу программу, полагают, что условие throws дает им информацию о возможном поведении вашего метода; вы нарушаете это предположение.

Даже если вы пишете программу для своего собственного использования, не стоит создавать непроверяемые исключения: программисты, не полностью понимающие работу вашего кода, могут упустить нечто важное. Кроме того, вероятно, что через несколько месяцев после написания программы именно вы окажетесь тем человеком, который будет изменять ее без полного понимания происходящего. Одно из правил создания понятных программ— считать классы RuntimeException и Error нерасширяемыми.

Все классы Error и RuntimeException содержат по меньшей мере два конструктора: одинвызывается без аргументов, а второйполучает объект String с описанием. Исключения, которые прямо или косвенно расширяют RuntimeException или Error, не объявляются в условии throws, поскольку они могут произойти в любой момент, что делает их объявление излишним.

Исключение CloneNotSupportedException непосредственно порождается от класса Exception, поскольку каждая программа, которая вызывает метод clone, возбуждающий данное исключение, должна явным образом его обработать. Оно рассмотрено в разделе “Дублирование объектов.

Настоящая глава делится на две части— одна посвящена классам RuntimeException, а другая— классам Error. Для каждого исключения приводится его значение, описание ситуации, в которой оно возбуждается, а также все дополнительные конструкторы.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]