Page 226 - 6253
P. 226
} catch(RuntimeException e) {
// Клас RuntimeException перехопить об'єкти всіх своїх підкласів
} catch(ArithmeticException e) {
// Не може бути викликаний, тому виникає помилка компіляції
}
Оператори try можна вкладати один в одний. Якщо у оператора try нижчого
рівня немає блоку catch, що відповідає згенерованому винятку, то пошук буде
виконаний на рівень вище, і будуть перевірені блоки catch зовнішнього оператора
try.
// Вкладені блоки try-catch
public class MultiTryCatch {
public static void main(String[] args) {
try { // Зовнішній блок
int a = (int) (Math.random() * 2) - 1;
System.out.println("a = " + a);
try { // Внутрішній блок
int b = 1 / a;
StringBuffer sb = new StringBuffer(a);
} catch (NegativeArraySizeException e) {
System.err.println("Недопустимий розмір буфера: " + e);
}
} catch (ArithmeticException e) {
System.err.println("Ділення на 0" + e);
}
}
}
В результаті запуску програми при a = 0 буде згенеровано виняток
ArithmeticException, а відповідний за його обробку блок try-catch є зовнішнім по
відношенню до місця генерації винятку. Цей блок і буде задіяний для обробки
згенерованої виняткової ситуації.
Третій підхід до обробки виняткових ситуацій буде розглянутий нижче на
225