Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Кафедра ЕОМ
/
Звіт
З лабораторної роботи №5
З дисципліни: «Кросплатформні засоби програмування»
На тему: «Виключення»
Львів 2018
Мета роботи: Оволодіти навиками використання механізму виключень при написанні програм мовою Java.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Виключення – це механізм мови Java, що забезпечує негайну передачу керування блоку коду опрацювання критичних помилок при їх виникненні уникаючи процесу розкручування стеку. Генерація виключень застосовується при:
помилках введення, наприклад, при введенні назви неіснуючого файлу або Інтернет адреси з подальшим зверненням до цих ресурсів, що призводить до генерації помилки системним програмним забезпеченням;
збоях обладнання;
помилках, що пов’язані з фізичними обмеженнями комп’ютерної системи, наприклад, при заповненні оперативної пам’яті або жорсткого диску;
помилках програмування, наприклад, при некоректній роботі методу, читанні елементів порожнього стеку, виходу за межі масиву тощо.
Ієрархія класів виключень
Всі виключення в мові Java поділяються на контрольовані і неконтрольовані та спадкуються від суперкласу Throwable. Безпосередньо від цього суперкласу спадкуються 2 класи Error і Exception.
Ієрархія класів, що спадкує клас Error, описує внутрішні помилки і ситуації, що пов’язані з браком ресурсів у системі підтримки виконання програм. Жоден об’єкт цього типу самостійно згенерувати неможна. При виникненні внутрішньої помилки можна лише відобразити повідомлення користувачу та спробувати коректно завершити виконання програми. Такі помилки є нечастими.
Ієрархія класів, що спадкує клас Exception поділяється на клас RuntimeException та інші. Виключення типу RuntimeException виникають внаслідок помилок програмування. Всі інші помилки є наслідком непередбачених подій, що виникають під час виконання коректної програми, наприклад, помилок вводу/виводу.
Класи, що спадкуються від Error та RuntimeException, відносяться до неконтрольованих виключень. Всі інші класи відносяться до контрольованих виключень. Лише контрольовані виключення можуть бути згенеровані програмістом у коді програми явно за допомогою ключового слова throw. Для всіх контрольованих виключень компілятор перевіряє наявність відповідних обробників.
Створення власних класів виключень
Як правило, власні класи контрольованих виключень використовуються для конкретизації виключних ситуацій, що генеруються стандартними класами контрольованих виключень, з метою їх точнішого опрацювання. Для створення власного класу контрольованих виключень необхідно обов’язково успадкувати один з існуючих класів контрольованих виключень та розширити його новою функціональністю. Найчастіше власні класи оснащують конструктором по замовчуванню та конструктором, що приймає детальний опис ситуації, яка призвела до генерації виключення. Для відображення опису помилкової ситуації можна використати метод toString() класу Throwable. Для цього необхідно викликати відповідний конструктор класу, що розширяється. Після цього створений клас можна застосовувати для генерації виключень.
Приклад власного класу виключень:
class FileFormatException extends IOException
{
public FileFormatException()
{}
public FileFormatException(String message)
{
/*
Даний виклик конструктора суперкласу дозволяє
використовувати метод toString() класу Throwable
*/
super(message);
}
}
Хід роботи:
Завдання:
1) Створити клас, що реалізує метод обчислення виразу заданого варіантом. Написати на мові Java та налагодити програму-драйвер для розробленого класу. Результат обчислень записати у файл. При написанні програми застосувати механізм виключень для виправлення помилкових ситуацій, що можуть виникнути в процесі виконання програми. Програма має розміщуватися в пакеті Група.Прізвище.Lab5 та володіти коментарями, які дозволять автоматично згенерувати документацію до розробленого пакету.2.
Автоматично згенерувати документацію до розробленого пакету.
Варіант: 7) y=ctg(x)/sin(7x-1)
Код програми:
Класс Calculation
package KI43.Husak.Lab5;
public class Calculation {
public double calc(double x) {
double y=0;
try {
y = (1/Math.tan(x))/(Math.sin(7*x-1));
if (y==Double.NaN || y==Double.NEGATIVE_INFINITY || y==Double.POSITIVE_INFINITY) throw new ArithmeticException();
}catch(ArithmeticException ex) {System.out.println("Error: " + ex);}
return y;
}
}
Класс Driver
package KI43.Husak.Lab5;
import java.io.*;
import java.util.Scanner;
public class Driver {
public static void main(String[] args) {
try {
PrintWriter fout = new PrintWriter(new File("logs5.txt"));
Scanner sc = new Scanner(System.in);
System.out.println("Enter x:");
double x = sc.nextDouble();
Calculation calculation = new Calculation();
double y = calculation.calc(x);
System.out.println("Result: " + y);
}catch(FileNotFoundException fnfe) {
System.out.println("Exception reason: Perhaps wrong file path");
}catch(IOException ex) {
System.out.println("Error: " + ex);
}
}
}
/
Рис. 1 Результат роботи програми
/
Рис. 2 Результат роботи програми, записаний у файл
/
Рис. 3 Документація до классу Driver, згенерована автоматично, з допомогою спеціальних коментарів
/
Рис. 4 Документація до классу Calculation, згенерована автоматично, з допомогою спеціальних коментарів
Висновок: Під час виконання даної лабораторної роботи я оволодів навиками використання механізму виключень при написанні програм мовою Java.