Перевірено виняток проти виключення під час виконання
Виняток становлять особливі типи подій, які можуть порушити нормальний потік програми. Виняток із назви походить від "виняткової події". Закидання винятку - це процес створення об’єкта винятку та передачі його системі виконуваного. Коли система виконання одержує об'єкт винятку, вона спробує знайти когось, щоб обробити його в стеці виклику, перемістивши його у зворотному порядку (у якому були названі методи). Система виконання успішна, якщо вона знаходить метод із обробником винятків. Обробник винятків - це блок коду, який може офіційно обробляти зазначений виняток. Якщо система виконання знайде відповідний обробник, вона передасть обробник об'єкта виключення. Це називається ловом винятку. Однак якщо виняток не вдається обробити, програма припиняється. У Java винятки успадковують клас Throwable. Перевірені винятки - це винятки, коли компілятор застосовує обробку. Винятки під час виконання - це тип виключень, які не перевіряються компілятором.
Що таке перевірений виняток?
Перевірені винятки - це або об'єкти класу java.lang.exception, або його підкласи (крім java.lang.RuntimeException та його підкласи). Перевірені винятки "перевіряються" під час компіляції. Це означає, що програміст повинен виловлювати або викинути ці винятки, інакше компіляція скаржиться (викликаючи помилку компілятора). Через цю причину багато перевірених винятків програмістам добре відомі. Наприклад, IOException та його підкласи перевіряються винятками, і кожного разу, коли програміст має справу з доступом або зміною файлу, компілятор перевіряє, щоб програміст піклувався про всі можливі IOExceptions..
Що таке виняток із виконання?
Винятки під час виконання включають java.lang.RuntimeException та всі його підкласи. Теоретично кажучи, вони служать тій самій цілі, що і перевірені винятки, і їх можна кидати або обробляти як перевірені винятки, але компілятор не виконує обробку ними. Отже, винятки з режиму виконання належать до сімейства неперевірених винятків. NullPointerException, NumberFormatEception, ClassCastException та ArrayIndexOutOfBoundsException - це звичайні винятки для виконання на Java.
Яка різниця між перевіреним винятком та винятком під час виконання?
Хоча як перевірені винятки, так і винятки з виконання часу є небажаним явищем під час виконання програми, вони мають свої відмінності. Перевірена обробка винятків застосовується компілятором, але винятки з виконання не є. Тому перевірені винятки повинні бути кинуті або оброблені для того, щоб код скомпілювався, але немає такої вимоги щодо винятків під час виконання. Отже, винятки з виконання часу належать до категорії неперевірених винятків разом з помилками.
Недоліком перевірених винятків є те, що програміст повинен впоратися з цим, навіть якщо вона не знає, як це зробити. Отже, якщо програміст просто викидає новий виняток, не загортаючи оригінал, слід стека, що належить до вихідного винятку, буде втрачено. Ось тут корисні винятки з виконання. Оскільки всі винятки з виконання часу можуть оброблятися в одному місці, таким чином програмісти можуть записувати меншу кількість коду. З іншого боку, оскільки перевірені винятки повинні бути вилучені, програміст не здивує. Вона завжди буде знати, який перевірений виняток може бути кинутий певним методом. Всупереч цьому, різні винятки з виконання можуть бути кинуті без відома програміста.