Java. Класс Exception. Создание собственных классов исключений. Примеры

Класс Exception. Создание собственных классов исключений. Примеры


Содержание


1. Назначение класса Exception. Создание собственных подклассов исключений

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

То есть, при объявлении класса MyExceptionClass наподобие

class MyExceptionClass extends Exception
{

}

экземпляр этого класса сможет использовать все методы класса Throwable. В нижеследующем коде продемонстрировано использование метода getMessage() из класса Throwable.

public class TrainException {
  public static void main(String[] args) {
    MyExceptionClass mc = new MyClass();
    String str = mc.getMessage();
    System.out.println("str = " + str);
  }
}

Результат выполнения функции main()

str = null

Итак, в собственных реализованных подклассах, которые унаследованы от класса Exception, не обязательно реализовывать собственные методы. Часто бывает достаточно методов базового класса Throwable.

 

2. Пример создания класса Triangle. Вычисление площади треугольника с использованием собственного класса исключения TriangleException

В примере демонстрируется создание собственного класса TriangleException для обработки исключения «неправильно заданы стороны треугольника».

Объявляется два класса:

  • Triangle – реализует треугольник по его сторонам a, b, c;
  • TriangleException – реализует перехват исключительной ситуации «неправильно заданы стороны треугольника».

Текст программы следующий:

import java.util.Scanner;

// Создание собственного класса исключения TriangleException
// Создание собственного класса Triangle, реализующего треугольник по его сторонам
class TriangleException extends Exception
{
  // переопределить метод toString(), описывающий исключение
  public String toString()
  {
    return "Error. Bad sides of triangle.";
  }
}

// объявить класс треугольник
class Triangle
{
  // стороны треугольника
  private double a,b,c;

  // конструктор по умолчанию
  public Triangle()
  {
    // равносторонний треугольник с длиной стороны 1
    a = b = c = 1;
  }

  // параметризированный конструктор
  public Triangle(double _a, double _b, double _c)
  {
    // использование класса исключения TriangleException
    try {
      // можно ли из сторон _a, _b, _c создать треугольник
      if (((_a+_b)<_c)||((_a+_c)<_b)||((_b+_c)<_a))
        throw new TriangleException();
    }
    catch(TriangleException e)
    {
      System.out.println("Exception: "+e.toString());
      return;
    }

    // если стороны треугольника введены корректно,
    // записать их во внутренние переменные класса
    a = _a;
    b = _b;
    c = _c;
  }

  // метод возвращающий площадь треугольника
  public double getArea()
  {
    // если стороны треугольника имеют корректные размеры,
    // то проверку на корень из отрицательного числа делать не нужно
    double p, s;
    p = (a+b+c)/2; // полупериметр
    s = Math.sqrt(p*(p-a)*(p-b)*(p-c)); // формула Герона
    return s;
  }
}

public class Train04 {
  // функция main() тестирует работу классов Triangle и TriangleException
  public static void main(String[] args) {
    double a, b, c;
    Scanner in = new Scanner(System.in);

    // ввод a, b, c
    System.out.print("a = ");
    a = in.nextDouble();
    System.out.print("b = ");
    b = in.nextDouble();
    System.out.print("c = ");
    c = in.nextDouble();

    // вычисление площади
    Triangle tr = new Triangle(a,b,c);
    double area = tr.getArea();
    System.out.println("area = " + area);
  }
}


Класс TriangleException унаследован от класса Exception, который в свою очередь, унаследован от класса Throwable. Таким образом, в классе TriangleException есть доступными методы класса Throwable, в том числе метод toString(), описывающий исключение. Класс TriangleException переопределяет метод toString() класса Throwable. Это делается с целью большей конкретизации описания самого исключения.

В функции main() для того чтобы ввести данные, используется класс Scanner из пакета java.util. Поэтому вначале программы вводится команда

import java.util.Scanner;

Результат работы программы в случае, если ввести неправильные данные

a = 3
b = 1
c = 1
Exception: Error. Bad sides of triangle.
area = 0.0

Результат работы программы в случае, если ввести корректные данные

a = 2
b = 2
c = 2
area = 1.7320508075688772

 


Связанные темы