throws Exception
Декларація являє собою автоматизований спосіб відстеження методів , які могли б кинути виняток для очікуваних , але неминучих причин. Декларація, як правило, конкретно стосується типу або типів винятків, які можуть бути створені, таких як throws IOException
або throws IOException, MyException
.
Ми всі маємо або в кінцевому підсумку напишемо код, який несподівано зупиняється і повідомляє про виняток через те, чого ми не передбачали до запуску програми, наприклад, поділ на нуль або індекс поза межами. Оскільки метод не очікував помилок, їх не вдалося "зловити" та обробити за допомогою пропозиції try catch. Будь-які підозрілі користувачі методу також не знали б про цю можливість, і їх програми також зупинялися б.
Коли програміст знає, що можуть виникати певні типи помилок, але він хотів би обробляти ці винятки поза методом, метод може "кидати" один або кілька типів винятків до виклику методу замість того, щоб обробляти їх. Якщо програміст не оголосив, що метод (може) створити виняток (або якщо Java не мала можливості оголосити його), компілятор не міг би знати, і про це мав би знати майбутній користувач методу, ловити та обробляти будь-які винятки, які може викликати метод. Оскільки програми можуть мати багато рівнів методів, написаних багатьма різними програмами, стає важко (неможливо) відстежувати, які методи можуть створювати винятки.
Незважаючи на те, що Java має можливість оголосити винятки, ви все одно можете написати новий метод з необробленими та незадекларованими винятками, і Java скомпілює його, і ви зможете запустити його і сподіватися на краще. Що Java не дозволить вам зробити, це скомпілювати ваш новий метод, якщо він використовує метод, який був оголошений як викид (и), за винятком випадків, коли ви або обробляєте заявлені винятки у своєму методі, або оголошуєте свій метод як викидання того самого виняток (и) або якщо є кілька винятків, ви можете впоратися з деякими, а решту кинути.
Коли програміст заявляє, що метод видає певний тип винятку, це лише автоматизований спосіб попередження інших програмістів, що використовують метод, що можливий виняток. Потім програміст може вирішити обробити виняток або передати попередження, оголосивши метод виклику як також викидання того самого винятку. Оскільки компілятор був попереджений, що можливий виняток у цьому новому методі, він може автоматично перевірити, чи обробляють виняток майбутні викличники нового методу чи оголошують його та примушують те чи інше.
Приємна річ у цьому типі рішення полягає в тому, що, коли компілятор повідомляє, Error: Unhandled exception type java.io.IOException
він надає номер файлу та рядок методу, який було оголошено для видалення виключення. Потім ви можете просто передати гроші і оголосити, що ваш метод також "кидає IOException". Це можна зробити аж до основного методу, де це призведе до того, що програма зупиниться і повідомить користувача про виняток. Однак краще вловити виняток і впоратися з ним приємно, наприклад, пояснивши користувачеві, що сталося, і як це виправити. Коли метод захоплює та обробляє виняток, він більше не повинен оголошувати виняток. Бакс там зупиняється, так би мовити.