Якщо метод породжує виняток і не обробляє його, то він повинен вказати про це, щоб обробка винятку була здійснена у місці виклику даного методу. Це здійснюється за допомогою застереження throws в оголошенні методу. Після нього вказується підряд через кому усі винятки, які можуть бути викинуті методом, окрім винятків класів Error та RuntimeException і їхніх підкласів. Нагадаємо, що клас Error – це необроблювані винятки, RuntimeException – винятки, які виникають в результаті помилки програміста (вихід за межі масиву, нульове посилання, невірне перетворення типів). Інші винятки – це помилки доступу, які доволі часто вимагають відповідної обробки.
Загальна форма оголошення методу наступна:
тип ім’я_методу(список_параметрів) throws список_винятків
{
// тіло методу
}
Наступна програма демонструє використання throws у методі де виникає виняток IllegalAccessException.
public class ThrowsException {
public static void exceptionMethod () throws IllegalAccessException{
System.out.println("Всередині exceptionMethod().");
throw new IllegalAccessException("Помилка доступу");
}
public static void main(String args[]){
try{
exceptionMethod();
System.out.println("Кінець програми"); //даний рядок не буде виведений
}catch(IllegalAccessException e){
System.out.println("Наш витяток: "+e);
}
}
}
Всередині ExceptionMethod().
Наш витяток: java.lang.IllegalAccessException: Помилка доступу
Як бачимо тепер обробка винятку відбувається у методі main(). Без інструкції try-catch програма призупинятиметься з друком відбитку стеку. Слід зауважити, що у методах інструкція throw поводить себе подібно до інструкції return. Тобто виконання методу припиняється і відбувається повернення в місце виклику методу.