Обработка ошибок в языке java.

В языке Java, JVM (Java Virtual Machine) обнаруживает ошибки компиляции при трансляции исходного кода в Байт код.

Обработка ошибок в языке java.

Ошибки времени выполнения:
Когда программа нарушает семантические ограничения языка Java, виртуальная машина Java дает сигнал об этой ошибке программе в виде исключения. Java указывает на то, что исключение будет генерироваться тогда, когда будут нарушены семантические ограничения и будет вызывать нелокальную передачу управления от места, где происходит исключение до места, которое может определяться программистом. Исключение генерируется в том месте, где оно произошло, и перехватывается в том месте, которому передается контроль.
Java-программы также могут явно генерировать исключения, используя операторы throw. Возвращением невозможных значений, таких как: значение целого типа -1, где отрицательное значение не ожидается вовсе, обеспечивается альтернатива для традиционного стиля обработки ошибочных условий. Такие неправильные значения слишком часто игнорируются или не проверяются вызывающей программой, приводя к программам, которые неправильны, проявляют нежелательное поведение, или все вместе.
В Java программе также можно указать какое исключение может произойти при вызове метода. Эта конструкция была введена специально, что бы заставить обработчиков обрабатывать исключения. Этот оператор – throws. Вызов метода, в котором указана данная конструкция, обязательно должен быть заключен в иело try- catch.
Само исключение в Java представляют собой объект, который описывает исключительную ситуацию, возникающую в части программного кода. Когда возникает такая ситуация, в вызвавшем ошибку методе создается и передается объект, который представляет собой исключение. В некоторой точке исключение перехватывается и обрабатывается.
Каждое исключение представляется экземпляром класса Throwable или одним из его подклассов; такой объект может использоваться для того, чтобы нести информацию с места, в котором исключение происходит к обработчику, который это исключение перехватывает. Обработчики устанавливаются предложениями catch операторов try . В процессе генерирования исключения, виртуальная машина языка Ява завершает преждевременно, один за другим, любые выражения, операторы, вызовы метода и конструктора, статические инициализаторы и поле инициализированных выражений, которые начали, но не закончили выполнение в текущем потоке. Этот процесс продолжается до тех пор, пока обработчик не найдет, что указывает на то, что это обрабатывается как частичное исключение присваиванием имен класса исключения или суперкласса класса исключения. Если такой обработчик не найден, тогда метод uncaughtException вызывается для ThreadGroup, который является породителем нитевого потока, таким образом весь объем работы производится для того, чтобы избежать ситуации необработанного исключения.

Исключение в Java генерируется по одной из трех причин:

1. Виртуальной машиной языка Java было сгенерировано исключение потому, что:

1. формула оценки выражения нарушает нормальную семантику языка Java.

2. ошибка происходит при загрузке или компоновке части Java-программы.

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

2. Оператор throw был выполнен в Java- коде.

3. Асинхронное исключение брошено потому, что:

1. был вызван метод stop класса Thread.

2. в виртуальной машине произошла внутренняя ошибка .

Когда генерируется исключение, управление передается от кода, который вызвал исключение для тесно связанного динамически-окруженного предложения catch оператора try ,который обрабатывает исключение.
Общая структура блока обработки исключений (см. Приложение 1)

Пример использования конструкций исключения (см. Приложение 2.)

Обрабатывает ли данное предложение catch, данное исключение определяется сравнением класса объекта, который был сгенерирован, и объявленного типа параметра предложения catch. Предложение catch обрабатывает исключение, если тип его параметра — это класс исключения или суперкласс класса исключения. Иначе говоря, предложение catch будет захватывать любой объект исключения, который является экземпляром объявленного типа параметра.

Передача управления, которая происходит когда генерируется исключение, вызывает досрочное завершение выражений и операторов до тех пор пока не встретится предложение catch, которое может обрабатывать исключение; тогда выполнение продолжается исполнением блока этого предложения catch. Код, который вызвал исключение никогда не возобновляется.

Если предложение catch, обрабатывающее исключение, не может быть найдено, тогда текущий поток (поток, который столкнулся с исключением) заканчивается, но только после выполнения всех finally-предложений и для ThreadGroup вызывается метод uncaughtException , то есть для родителя текущего потока.

В ситуациях, где желательно чтобы один блок кода всегда выполнялся после другого, даже если тот другой блок кода заканчивается преждевременно, может использоваться оператор try с finally-предложением . Если try- catch блок в try-catch-finally ,заканчивается преждевременно, блок finally все равно выполняется во время распространения исключения, даже если соответствующее catch-предложение в конечном счете не найдено. Если finally-предложение выполняется из-за преждевременного завершения try-блока и само finally-предложение заканчивается преждевременно, тогда причина для преждевременного завершения блока try отбрасывается и новая причина для преждевременного завершения передается от finally.

Асинхронные исключения.

Большинство исключений в Java происходят синхронно, как результат действия потока, в котором они случаются и в месте Java -программы, которое определяется для возможного результата в таком исключении. Асинхронное исключение, в противоположность, есть исключение, которое может потенциально происходить в любом месте при выполнении Java — программы.

Асинхронные исключения в языке Java встречаются очень редко. Они происходят только в результате:

1. Вызова stop методов класса Thread или ThreadGroup

2. Внутренней ошибки (InternalError) в виртуальной машине языка Ява

Stop() метод могут быть вызван одним потоком для того, чтобы воздействовать на другой поток или все потоки в указанной группе потоков. Они — асинхронные, потому что могут происходить в любой момент при выполнении другого потока или потоков.
Java разрешает небольшому, но ограниченному объему потоку выполнения происходить перед тем, как генерируется асинхронное исключение. Эта задержка разрешается для того, чтобы позволить оптимизированному коду обнаружить и сгенерировать эти исключения в том месте, где это удобно для обработки их, для полного удовлетворения семантики языка Java.

Иерархия исключений

Возможные исключения Ява-программ организованы в иерархии классов, содержащейся в классе Throwable , непосредственном подклассе Object. Классы Exсeption и Error — непосредственные подклассы класса Throwable. Класс RuntimeException — непосредственный подкласс класса Exсeption.

Обработка ошибок в языке java.

Классы исключений, объявленные стандартными пакетами java.lang, java.util, java.io и java.net, называются стандартными классами исключений.

Java-программы могут использовать ранее существующие классы исключений в операторах throw, или определять дополнительные классы исключений, как подклассы класса Throwable или любого из его подклассов. Чтобы воспользоваться преимуществами Java -системы проверки времени компиляции для обработчиков исключений, обычно определяют большинство классов новых исключений как классы проверяемых исключений и как подклассы класса Exсeption, которые не являются подклассами RuntimeException.

Java для начинающих. Урок 37: Исключения (часть 1). Обработка исключений.


Похожие статьи.

Понравилась статья? Поделиться с друзьями: