Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Базовые типы

Замещающие типы
Без указателей
Массивы
Структурное программи-
рование

Обработка исключений
Возбуждение исключений
Классы обработки исключений
Блок finally
Строки String
Класс Math
Класс Vector
Класс Stack
Словарь на базе Hashtable
Словарь на базе Properties
Цифровые часы
Собственный класс
Наследование классов

Интерфейсы

Назад Вперед

1.7. Возбуждение исключений

В примере демонстрируются приемы обработки исключений нескольких типов, возникающих в приложениях Java.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

В приложении нетрудно определить собственный класс для обработки исключений. Такой класс должен быть унаследован от класса Exception с использованием ключевого слова extends.

При возбуждении исключения ключевым словом throw вы можете передать конструктору соответствующего объекта произвольные параметры. Эти параметры могут быть использованы для передачи информации об условиях, вызвавших появление исключения.

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

Описание примера

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

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

Исходный текст основного класса throwDemo представлен ниже:

public class throwDemo
{
  public static void main(String args[]) 
  {
    try
    {
      MyPoint mp = new MyPoint(0, -1);
    }
    catch(NegativePointCoordinateEx e)
    {
      System.out.println("\n" + e.toString()); 
      System.out.println("Point: (" 
        + e.x + "," + e.y + ")"); 
    }
    System.out.println("\n" ); 
  }
}

Здесь мы создаем объект класса MyPoint, намеренно передавая конструктору отрицательную координату по оси Y.

Обработчик возникающего в результате этой операции исключения NegativePointCoordinateEx отображает на консоли две строки. Первая строка создается базовым классом Exception, а вторая формируется из координат точки, вызвавших появление исключения:

NegativePointCoordinateEx: 
  Negative Point Coordinate: (0,-1)
Point: (0,-1)

Реализация класса MyPoint выглядит следующим образом:

class MyPoint
{
  private int m_x=0;
  private int m_y=0;
  
  MyPoint(int ix, int iy)
    throws NegativePointCoordinateEx
  {
    if((ix == 0) | (iy == 0))
    {
      throw new NegativePointCoordinateEx(
        ix, iy, this);
    }
    m_x = ix;
    m_y = iy;
    
  }
  
  public void setPoint(int ix, int iy)
    throws NegativePointCoordinateEx
  {
    if((ix == 0) | (iy == 0))
    {
      throw new NegativePointCoordinateEx(
        ix, iy, this);
    }
    m_x = ix;
    m_y = iy;
  }
  
  public void printPoint()
  {
    System.out.println("Point: (" 
      + m_x + "," + m_y + ")"); 
  }
}

Обратите внимание, что в прототипе конструктора мы указали имя класса, подготовленного нами для обработки исключений:

MyPoint(int ix, int iy)
    throws NegativePointCoordinateEx

Аналогично мы поступили и при определении метода setPoint, который тоже может возбуждать исключение NegativePointCoordinateEx.

Исключение возбуждается следующим образом:

if((ix == 0) | (iy == 0))
{
  throw new NegativePointCoordinateEx(
    ix, iy, this);
}

Мы создаем объект класса NegativePointCoordinateEx, передавая конструктору координаты точки, а также ссылку на объект, в котором произошло исключение.

Исходный текст класса NegativePointCoordinateEx представлен ниже:

class NegativePointCoordinateEx
  extends Exception
{
  public int x;
  public int y;
    
  NegativePointCoordinateEx(int ix, int iy, 
    Object obj)
  {
    super("Negative Point Coordinate: (" 
      + ix + "," + iy + ")");
    x = ix;
    y = iy;
  }
}

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

Кроме того, ошибочные координаты мы записали и в поля класса NegativePointCoordinateEx с именами x и y. В дельнейшем блок обработки исключения catch сможет их проанализировать.

Что же касается ссылки на объект, вызвавший исключение, то в нашем примере он не используется. Тем не менее, в более сложных случаях вы сможете найти для него применение, так как он предоставляет доступ ко всем полям и методам объекта.

Назад Вперед

[Назад]