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 MyExceptionClass();
    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);

    in.close();
  }
}


Класс 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

 


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