русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Причины возникновения ошибок


Дата добавления: 2015-06-12; просмотров: 2312; Нарушение авторских прав


Существует три причины возникновения исключительных ситуаций,

• Попытка выполнить некорректное выражение.

Например, деление на ноль, или обращение к объекту по ссылке, равной null, попытка использовать класс, описание которого (class-файл) отсутствует, и т.д.

В таких случаях всегда можно точно указать, в каком месте про­изошла ошибка, - именно в некорректном выражении.

• Выполнение оператора throw.

Этот оператор применяется для явного порождения ошибки. Оче­видно, что и здесь можно указать место возникновения исключи­тельной ситуации,

• Асинхронные ошибки во время исполнения программы.
Причиной таких ошибок могут быть сбои внутри самой виртуальной

машины (ведь она также является программой), или вызов метода stop() у потока выполнения Thread.

В этом случае невозможно указать точное место программы, где про­исходит исключительная ситуация. Если мы попытаемся остановить поток выполнения (вызвав метод stop()), нам не удастся предсказать, при выпол­нении какого именно выражения этот поток остановится.

Таким образом, все ошибки в Java делятся на синхронные и асинхрон­ные. С первыми сравнительно проще работать, так как принципиально возможно найти точное место в коде, которое является причиной возникно­вения исключительной ситуации. Конечно, Java является строгим языком в ТОМ смысле, что все выражения до точки сбоя обязательно будут выполнены, и в то же время ни одно последующее выражение никогда выполнено не будет. Важно помнить, что ошибки могут возникать как по причине недостаточной внимательности программиста (отсутствует нужный класс, или индекс мас­сива вышел за допустимые границы), так и по независящим от него причинам (произошел разрыв сетевого соединения, сбой аппаратного обеспечения, Например, жесткого диска и др.).

Асинхронные ошибки гораздо сложнее в обнаружении и исправле­нии. Обычному разработчику очень трудно выявить причины сбоев в виртуальной машине. Это могут быть ошибки создателейJVM, несовме­стимость с операционной системой, аппаратный сбой и многое другое. Все же современные виртуальные машины реализованы довольно хорошо, и подобные сбои происходят крайне редко (при условии использова­ния качественных комплектующих).



Аналогичная ситуация наблюдается и в случае с принудительной остановкой потоков исполнения. Поскольку это действие выполняется операционной системой, никогда нельзя предсказать, в каком именно месте остановится поток. Это означает, что программа может многократно отработать корректно, а потом неожиданно дать сбой просто из-за того, что поток остановился в каком-то другом месте. По этой причине принудительная остановка не рекомендуется. В лекции 12 рассматриваются примеры корректного управления жизненным циклом потока.

При возникновении исключительной ситуации управление переда­ется от кода, вызвавшего исключительную ситуацию, на ближайший блок catch (или вверх по стеку) и создается объект, унаследованный от класса Throwable, или его потомков (см. диаграмму иерархии классов-исключе­ний), который содержит информацию об исключительной ситуации и ис­пользуется при ее обработке. Собственно, в блоке catch указывается именно класс обрабатываемой ситуации. Подробно обработка ошибок рассматривается ниже.

Иерархия, по которой передается информация об исключительной ситуации, зависит от того, где эта исключительная ситуация возникла. Если это

• метод, то управление будет передаваться в то место, где данный метод был вызван;

• конструктор, то управление будет передаваться туда, где попыта­лись создать объект (как правило, применяя оператор new);

• статический инициализатор, то управление будет передано туда, где произошло первое обращение к классу, потребовавшее его инициа­лизации.

Допускается создание собственных классов исключительных ситуаций. Осуществляется это с помощью механизма наследования, то есть класс пользовательской исключительной ситуации должен быть унаследован от класса Throwable, или его потомков.



<== предыдущая лекция | следующая лекция ==>
Именованные блоки | Конструкция try-catch


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.602 сек.