Управление исключительными ситуациями. Операторы try, catch и throw

   
На этом шаге мы приведем общий вид конструкции обработки исключений и алгоритм его выполнения.

   
С помощью этих операторов и обрабатываются исключительные ситуации. Синтаксис объявления этих операторов таков:

try  {
  // здесь находится участок программы, в котором 
  // могут возникнуть исключительные ситуации
  } 
  [ catch (объявление исключения)
    { // операторы для обработки возникшего в try-блоке исключения
    }
  [ catch (объявление исключения)
    { // операторы, обрабатывающие другой тип исключения
    } ] ... ]

throw выражение

   
Оператор throw выбрасывает для последующей обработки возникающее исключение.

   
Тело оператора catch - это фактически и есть обработчик исключения. Исключение выбрасывается оператором throw, захватывается оператором catch и в его теле обрабатывается.

   
Объявление исключения в операторе catch определяет тип исключения, которое станет обрабатываться в catch. Этим типом может служить конкретный тип данного, определенный в
языке, в т. ч. и класс. Если в объявлении исключения задано многоточие (...), то это означает, что оператор catch станет обрабатывать любой тип возникающего исключения. Такой catch должен быть последним в try-блоке.

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

   
Необязательный операнд (выражение) в throw имеет смысл операнда в операторе return: тоже возвращает нечто.

   
Более детально процесс обработки исключительной ситуации состоит в следующем:

  • система исполняет операторы программы в обычном режиме, не обращая внимания на наличие операторов обработки исключительных ситуаций;
  • как только в момент исполнения участка программы в теле try возникает исключительная ситуация, из выражения, находящегося в операторе throw (т. е. выражение в этом операторе должно всегда присутствовать),
    создается объект класса Exceptions (просто вызывается конструктор этого класса) и тут же отыскивается наивысший по иерархии оператор catch, который может обработать исключение возникшего типа (или
    любого типа). Если подходящего по возникшему типу исключения оператора catch не находится, то отыскивается ближайший следующий try-блок (как вы уже, наверно, догадались, try-блоков может быть много, потому
    что исключительные ситуации могут возникать в различных участках вашей программы и каждый из таких подозрительных участков надо охватить try-блоком). Этот процесс продолжается, пока самый крайний try-блок не проверится;
  • если все же подходящий try-блок не будет обнаружен или в момент такого поиска возникнет новое исключение, вызывается специальная функция среды, которая завершает выполнение приложения. Если же подходящий
    try-блок найдется, то начнется обработка исключения соответствующим оператором catch.

   
На следующем шаге мы рассмотрим пример использования перечисленных конструкций.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий