Использование try и catch

Хотя обработчик исключений по умолчанию, который предоставляет система времени выполнения Java, удобен для отладки, обычно вы захотите обрабатывать исключения самостоятельно. Это дает два существенных преимущества. Во-первых, вы получаете возможность исправить ошибку. Во-вторых, предотвращается автоматическое прерывание выполнения программы. Большинство пользователей будут недовольны (и это как минимум), если ваша программа будет останавливаться и распечатывать трассировку стека всякий раз при возникновении ошибки. К счастью, предотвратить это достаточно просто.

Чтобы противостоять и обрабатывать ошибки времени выполнения, нужно просто поместить код, который вы хотите наблюдать, внутрь блока try. Непосредственно за блоком try следует включить конструкцию catch, которая специфицирует тип перехватываемого исключения. Чтобы проиллюстрировать, насколько это просто делается, в следующую программу включен блок try с конструкцией catch, который обрабатывает исключение ArithmeticException, генерируемое в результате попытки деления на ноль.

class Ехс2 {
public static void main(String args[]) {
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 никогда не будет выполняться. Как только исключение возбуждено, управление передается из блока try в блок catch. То есть строка "Это не будет напечатано" не отображается. После того, как блок catch будет выполнен, управление передается на строку программы, следующую за всем механизмом try/catch.

Операторы try и catch составляют единый узел. Область действия catch не распространяется на те операторы, которые идут перед оператором try. Оператор catch не может перехватить исключение, возбужденное другим оператором try (кроме случаев вложенных конструкций try, которые будут описаны ниже). Операторы, которые защищены блоком try, должны быть заключены в фигурные скобки (т.е. они должны находиться внутри блока). Вы не можете применить try к отдельному оператору программы.

Целью правильно построенных операторов catch является разрешение исключительных ситуаций и продолжение работы, как если бы ошибки вообще не случались. Например, в следующей программе каждая итерация цикла for получает два случайных числа. Эти два числа делятся одно на другое, а результат используется для деления значения 12345. Окончательный результат помещается в а. Если какая-либо из операций деления вызывает ошибку деления на ноль, эта ошибка перехватывается, значение а устанавливается равным 0 и выполнение программы продолжается.

// Обработка исключения с продолжением работы.
import java.util.Random;
class HandleError {
public static void main(String args[]) {
int a=0, b=0, c=0;
Random r = new Random () ;
for (int i=0; K32000; i++) {
try {
b = r.nextlnt();
с = r.nextlnt () ;
a = 12345 / (b/c);
}
catch (ArithmeticException e) {
System.out.println("Деление на ноль.");
a = 0; // присвоить ноль и продолжить работу
}
System.out.println("а: " + а);
}
}
}