МЕТОДИ І ЗАСОБИ. ОБРОБКА ВИКЛЮЧЕНЬ

Содержание

Слайд 2

Виключення Основні принципи обробки виключень Типи виключень Невідловлені винятки Використання операторів

Виключення
Основні принципи обробки виключень
Типи виключень
Невідловлені винятки
Використання операторів try і catch
Множинні оператори

catch
Вкладені оператори try
Оператор throw
Методи з ключовим словом throws
Блок finally
Вбудовані виключення Java
Створення власних підкласів виключень
Використання виключень
Слайд 3

Виключення Виключення - це аварійний стан, що виникає в кодової послідовності

Виключення

Виключення - це аварійний стан, що виникає в кодової послідовності під

час виконання.
Іншими словами, виняток - це помилка часу виконання.
В машинних мовах, не підтримують обробку винятків, помилки повинні бути перевірені і оброблені вручну - зазвичай за допомогою кодів помилки, і т. д.
Обробка виключень у Java переносить управління обробкою помилок часу виконання в об'єктно-орієнтоване русло.
Слайд 4

Основні принципи обробки виключень Виняток у мові Java - це об'єкт,

Основні принципи обробки виключень

Виняток у мові Java - це об'єкт, який

описує виключну (т. е. помилкову) ситуацію, що сталася в деякій частині коду.
Коли виняткова ситуація виникає, створюється об'єкт, що представляє цей виняток, і «вкидається» в метод, що викликав помилку.
Слайд 5

Основні принципи обробки виключень У свою чергу, метод може вибрати, обробляти

Основні принципи обробки виключень

У свою чергу, метод може вибрати, обробляти чи

виключення самому або передати його кудись ще.
У кожному разі, в деякій точці виключення «захоплюється» і обробляється.
Слайд 6

Основні принципи обробки виключень Винятки можуть генеруватися виконавчою системою Java, або

Основні принципи обробки виключень

Винятки можуть генеруватися виконавчою системою Java, або ваш

код може згенерувати їх "вручну".
Викидаються винятки стосуються фундаментальних помилок, які порушують обмеження середовища виконання або правила мови Java.
Винятки, згенеровані вручну, зазвичай використовуються, щоб повідомити викликає програмі про деяку аварійної ситуації.
Слайд 7

Основні принципи обробки виключень Обробка виключень у Java управляється за допомогою

Основні принципи обробки виключень

Обробка виключень у Java управляється за допомогою п'яти

ключових слів - try, catch, throw, throws і finally.
Програмні оператори, які потрібно контролювати щодо винятків, містяться в блоці try.
Якщо в блоці try відбувається виняток, кажуть, що воно викинуто (thrown) цим блоком.
Ваш код може перехопити (catch) це виключення (використовуючи оператор catch) і обробити його деяким раціональним способом.
Слайд 8

Основні принципи обробки виключень Винятки, що генеруються виконавчої (run-time) системою Java,

Основні принципи обробки виключень

Винятки, що генеруються виконавчої (run-time) системою Java, викидаються

автоматично.
Для "ручного" викиду винятку використовується ключове слово throw. Будь-яке виключення, яке викинуто з методу, слід визначати за допомогою ключового слова throws, що розміщується в заголовному пропозиції визначення методу.
Будь код, який обов'язково повинен бути виконаний перед поверненням з try-блоку, розміщується в finally-блоці, зазначеному в кінці блокової конструкції try {... }-catch {... }-finally {...}.
Слайд 9

Основні принципи обробки виключень Загальна форма блоку обробки виключень: try {

Основні принципи обробки виключень

Загальна форма блоку обробки виключень: try { /

/ Блок коду для контролю над помилками} catch (ExceptionTypel ехOb) { II обробник виключень для ExceptionTypel} catch (ExceptionType2 ехOb) { II обробник виключень для ExceptionType2} II ... [Finally { / / Блок коду для обробки перед поверненням з try блоку }]
Тут ExceptionType - тип виключення, яке виникло; ЕхOb - об'єкт цього виключення, Finally-блок - не обов'язковий.
Слайд 10

Типи виключень Всі типи винятків є підкласами вбудованого класу Throwable. Throwable

Типи виключень

Всі типи винятків є підкласами вбудованого класу Throwable. Throwable являє собою

вершину ієрархії класів винятків. Безпосередньо нижче Throwable знаходяться два підкласи, які поділяють виключення на дві різні гілки.
Одна гілка очолюється класом Exception. Цей клас використовується для виняткових станів, які повинні перехоплювати програми користувача. Це також клас, в підкласах якого ви будете створювати ваші власні замовні типи винятків.
Іншу гілку очолює клас Error, що визначає виключення, перехоплення яких вашою програмою при нормальних обставин не очікується.
Винятки типу Error застосовуються виконавчою системою Java для вказівки помилок, що мають відношення безпосередньо до середовища часу виконання.
Слайд 11

Невідловлені винятки class ExcO { public static void main (String args

Невідловлені винятки
class ExcO { public static void main (String args [])

{int d = 0; int a = 42 / d;}}
Коли виконавча система Java виявляє спробу поділу на нуль. вона створює новий об'єкт виключення і потім викидає його.
Java.lang.ArithmeticException: / by zero / / повідомлення про помилку? At ExcO, main (ExcO.Java: 4) / / траса стека
ім'я класу (ЕхсО), ім'я методу (main), ім'я файлу (ExeO.java) і номер рядка (4).
Слайд 12

Використання операторів try і catch class Exc2 ( public static void

Використання операторів try і catch

class Exc2 ( public static void main (String

aros [j]) { int d, a; try {/ / контролювати блок коду d = 0; a = 42 / d; System.out.println ("Це не буде надруковано.");} catch (ArithmeticException e) {/ / перехопити помилку / / Ділення на нуль System.out.println ("Поділ на нуль.");} System.out.println ("Після оператора catch."); }
Ця програма генерує наступний висновок:
Поділ на нуль. Після оператора catch. Звернення до println () всередині блоку try ніколи не виконується.
Слайд 13

Множинні оператори catch В деяких випадках на одній ділянці коду може

Множинні оператори catch

В деяких випадках на одній ділянці коду може виникнути

більше одного винятку. Після того як цей catch-оператор виконається, інші - обходяться, і виконання продовжується після блоку try / catch.
class MultiCatch { public static void main (String args []) {Try { int a = args. length; System.out.println ("a =" + a)​​; int b = 42 / a; int c [] = {1}; c [42] = 99;} catch (ArithmeticException e) ( System.out.println ("Поділ на нуль:" + e);}   catch (ArrayIndexOutOfBoundsException e) { System.out.println ("Індекс елемента масиву oob:" + e);} System.out.println ("Після блоку try / catch.");}}
Ця програма викине виняток "поділ на нуль", якщо вона буде запускатися без параметрів командного рядка.
Якщо не виникло перше виключення, то це викличе виключення ArrayindexOutofBoundsException, так як цілочисельний масив з має довжину 1, тоді як програма намагається призначити деяке значення його сорок другого елементу з [42].
Слайд 14

Вкладені оператори try Оператори try можуть бути вкладеними. Один try-оператор може

Вкладені оператори try

Оператори try можуть бути вкладеними.
Один try-оператор може знаходитися всередині

блоку іншого оператора try.
При вході в блок try контекст відповідного винятку поміщається в стек.
Якщо внутрішній оператор try не має catch-обробника для специфічного винятку, стек розкручується, і проглядається наступний catch-обробник try-оператора.
Процес триває до тих пір, поки не буде досягнутий відповідний catch-оператор, або поки всі вкладені оператори try не будуть вичерпані.
Якщо узгоджується оператора catch немає, то виключення обробить виконавча система Java.
Слайд 15

Вкладені оператори try / / Приклад вкладених try-операторів, class NestTry {

Вкладені оператори try

/ / Приклад вкладених try-операторів, class NestTry { public static

void main (String args []) {   try { int a = args.length; / * Якщо немає аргументів командного рядка, наступний оператор буде генерувати виключення поділу на нуль. * / int b = 42 / а; System.out.println ("a =" + а); try {/ / вкладений try-блок / * Якщо використовується один аргумент командного рядка, то наступний код буде генерувати виключення поділу на нуль. * / if (a == 1) a = а / (а-а); / / ділення на нуль

/ * Якщо використовується два аргументи командного рядка, то генерується виключення виходу за кордон масиву. * / if (a == 2) { int с [] = {1}; с [42] = 99; / / генерувати виняток } / / Виходу за кордон масиву }   catch (ArraylndexOutOfBoundsException e) { System.out.println ("Індекс виходить за кордон масиву:" + е);} } catch (ArithmeticException e) { System.out.println («Ділення на нуль:" + е);}}}

Слайд 16

Оператор throw Ваша програма може сама явно викидати винятку, використовуючи оператор

Оператор throw

Ваша програма може сама явно викидати винятку, використовуючи оператор throw.

Загальна форма оператора throw така:
Throw Throwableinstance;
Тут Throwableinstance повинен бути об'єктом типу Throwable або підкласу Throwable. Прості типи, такі як int або char, а також не-Throwable-класи (типу string і object) не можуть використовуватися як виключення.
Є два способи отримання Throwable-об'єкта: використання параметра в пропозиції catch або створення об'єкта за допомогою операції new.
Слайд 17

Методи з ключовим словом throws Якщо метод здатний до породження виключення,

Методи з ключовим словом throws

Якщо метод здатний до породження виключення, яке

він не обробляє, він повинен визначити свою поведінку так, щоб викликають методи могли самі охороняти себе від даного виключення.
Це забезпечується включенням пропозиції throws в заголовок оголошення методу.
Пропозиція throws перераховує типи винятків, які метод може викидати.
Це необхідно для всіх винятків, крім винятків типу Error, RuntimeException або будь-яких їх підкласів.
Всі інші винятки, які метод може викидати, повинні бути оголошені в реченні throws.
Слайд 18

Методи з ключовим словом throws Якщо ця умова не дотримана, то

Методи з ключовим словом throws

Якщо ця умова не дотримана, то відбудеться

помилка часу компіляції.
Загальна форма оголошення методу, яке включає пропозицію throws: type method-name (parameter-list) throw exception-list { / / Тіло методу}
Тут exception-list - список розділених комами винятків, які метод може викидати.
Слайд 19

Методи з ключовим словом throws class ThrowsDemo { static void throwOne()

Методи з ключовим словом throws

class ThrowsDemo {
static void throwOne()
throws IllegalAccessException

{
System.out.println("Внутри throwOne.");
throw new IllegalAccessException("demo");
}
public static void main(String args[])
{ try {
throwOne();
}
catch (IllegalAccessException e)
( System.out.println("Выброс " + e); } } }
Висновок, згенерований виконанням цієї програми:
Всередині throwOne.
Викид Java.lang.IllegalAccessException: demo
Слайд 20

Блок finally Коли виняток викидається, виконання методу має досить нерівний, нелінійний

Блок finally

Коли виняток викидається, виконання методу має досить нерівний, нелінійний шлях,

який змінює нормальне проходження потоку через метод.
В залежності від того, як кодований метод, виключення може викликати навіть передчасний вихід з нього.
Наприклад, якщо метод відкриває файл для введення і закриває його для висновку, то ви навряд чи захочете, щоб закриває файл код був обійдений механізмом обробки винятків.
Для реалізації цієї можливості і призначене ключове слово finally.
Слайд 21

Блок finally // Демонстрирує finally, class FinallyDemo { // Вихід з

Блок finally

// Демонстрирує finally,
class FinallyDemo {
// Вихід з методу через

виключення,
static void procAO { try {
System.out.println(«Усередині procA"); throw new RuntimeException("demo"); }
finally {
System.out.println("finally для procA "); } }
// Поверненя з try-блоку.
static void procBO { try {
System.out.println(«Усередині procB"); return; }
finally {
System.out.println("finally для procB "); } }

// Нормальне виконання try-блоку,
static void procCO { try {
System.out.println(«Усередині procC"); }
finally {
System.out.println("finally procC"); } }
public static void main(String args[]) {
try {
procA(); ) catch (Exception e) {
System.out.println(«Виключення викинуте"); }
procB(); procC(); } }

Слайд 22

Вбудовані виключення Java Підкласи неконтрольованих винятків Java

Вбудовані виключення Java

Підкласи неконтрольованих винятків Java 

Слайд 23

Вбудовані виключення Java Контрольовані винятки, визначені в java. lang

Вбудовані виключення Java

Контрольовані винятки, визначені в java. lang

Слайд 24

Створення власних підкласів виключень Клас Exception не визначає жодних власних методів,

Створення власних підкласів виключень

Клас Exception не визначає жодних власних методів, а

успадковує ці методи від класу Throwable.
Таким чином, всім винятків, навіть тим, що ви створюєте самі, доступні методи Throwable.
Методи, визначені в Throwable
Слайд 25

Створення власних підкласів виключень class MyException extends Exception { private int

Створення власних підкласів виключень

class MyException extends Exception { private int detail;
MyException(int

a) {
detail = a;
public String toString() {
return "MyException[" + detail + "]"; } }
class ExceptionDemo {
static void compute(int a) throws MyException { System.out.printIn(" Викликаний compute(" + a + "));
if(a > 10)
throw new MyException(a);

System.out.println("Нормальний вихід"); }
public static void main(String args[]) { try {
compute(1); compute(20); } catch (MyException e) {
System.out.printIn("Викинуто " + e); } } }
Викликаний compute(1)
Нормальний вихід
Викликаний compute(20)
Викинуто MyException[20]