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;
  }
}

// клас, що містить функцію main()
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

 


Зв’язані теми