Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
JavaEx.docx
Скачиваний:
27
Добавлен:
10.05.2015
Размер:
212.43 Кб
Скачать

Общий способ обработки ошибок.

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

2. В отсутствие собственного механизма обработки исключений в языках программирования, для программ, наиболее общей реакцией на любую исключительную ситуацию является немедленное прекращение выполнения с выдачей пользователю сообщения о характере исключения. Тогда можно утверждать, что тогда обработка исключений передается стандартному обработчику исключений системы в которой происходит выполнение. Пример такого нарушения - попытка индексировать вне границ массива. Некоторые языки программирования и их реализации противодействуют таким ошибкам безоговорочным завершением программы; другие позволяют реагировать произвольным или непредсказуемым образом.   Такие подходы не совместимы с задачами языка Java: обеспечивать мобильность и устойчивость к ошибкам. Языки имеющие механизм обработки исключений имеют в наличии специальные конструкции для обработки ошибок. За исключением незначительных различий в синтаксисе, существует лишь пара вариантов обработки исключений. В наиболее распространённом из них исключительная ситуация генерируется специальным оператором (throw или raise), а само исключение, с точки зрения программы, представляет собой некоторый объект данных. То есть, генерация исключения состоит из двух этапов: создания объекта-исключения и возбуждения исключительной ситуации с этим объектом в качестве параметра. При этом конструирование такого объекта само по себе выброса исключения не вызывает. В одних языках объектом-исключением может быть объект любого типа данных (в том числе строкой, числом, указателем и так далее), в других — только предопределённого типа-исключения (чаще всего он имеет имя Exception) и, возможно, его производных типов (типов-потомков, если язык поддерживает объектные возможности).

Область действия обработчиков начинается специальным ключевым словом try или просто языковым маркером начала блока (например, begin) и заканчивается перед описанием обработчиков (catch, except, resque). Обработчиков может быть несколько, один за одним, и каждый может указывать тип исключения, который он обрабатывает. Если язык поддерживает наследование и типы-исключения могут наследоваться друг от друга, то обработкой исключения занимается первый обработчик, совместимый с исключением по типу.

Некоторые языки также допускают специальный блок (else), который выполняется, если ни одного исключения не было сгенерировано в соответствующей области действия. Чаще встречается возможность гарантированного завершения блока кода (finally, ensure).

3. Логические ошибки сложны в обнаружении и устранении, для данных целей, необходимо использовать отладчик, просматривать на ошибки блок-схему. При этом сложноть отладки увеличивается под влиянием следующих факторов: 1. опосредованного проявления ошибок; 2. возможности взаимовлияния ошибок; 3. возможности получения внешне одинаковых проявлений разных ошибок; 4. отсутствия повторяемости проявлений некоторых ошибок от запуска к запуску; 5. написания отдельных частей программы разными программистами.

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