Try-Catch-Finally в Java | Обработка исключений
· Блоки Try
· Блоки Catch
· Блоки finally
· Объединяем все вместе
· Вложенные блоки try
· Перехватываем несколько исключений
Попробуйте блоки
Блоки try — это первая часть блоков try/catch. Они содержат любой код, который может вызвать исключение. В Java, когда мы не уверены в результате оператора, мы можем поместить эти операторы в этот блок try. Блок try может использоваться в методе или другом блоке try.
За блоком try всегда следует блок catch , который обрабатывает исключение, возникающее в связанном блоке try.
Для IOExceptions поместите любой код, который создает, читает, записывает или закрывает файл внутри блока try.
Синтаксис
Первым шагом в создании обработчика исключений является включение кода, который может генерировать исключение, в блок try . В общем случае блок try выглядит следующим образом:
try {
code
}
catch and finally blocks . . .
Пример
Чтобы создать обработчик исключений для метода writeList из класса ListOfNumbers, заключите операторы создания исключений метода writeList в блок try . Существует несколько способов сделать это. Вы можете поместить каждую строку кода, которая может вызывать исключение, в отдельный блок try и предоставить для каждой отдельные обработчики исключений. Или вы можете поместить весь код writeList в один блок try и связать с ним несколько обработчиков. В следующем листинге для всего метода используется один блок try , поскольку рассматриваемый код очень короткий.
private List<Integer> list;
private static final int SIZE = 10;
public void writeList() {
PrintWriter out = null;
try {
System.out.println("Entered try statement");
FileWriter f = new FileWriter("OutFile.txt");
out = new PrintWriter(f);
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " + list.get(i));
}
}
catch and finally blocks . . .
}
Попробуйте блокировать боковые заметки
- Наряду с кодом, который может вызвать исключение, блоки try могут (но не обязательно) также содержать код, который не вызывает исключений.
- Программы могут содержать более одного блока try. Кроме того, один блок try может находиться внутри другого блока try.
Поймать блоки
Вторая половина блока try/catch — это блок catch. В то время как блоки try содержат код, вызывающий исключение, блоки catch содержат код, обрабатывающий исключение.
В Java блок catch используется для обработки исключения, перехваченного блоком try. Блок catch включает в себя код и выполняется, если возникает исключение внутри блока try. Если система сталкивается с исключением при выполнении операторов в блоке try, она пропускает остальные операторы и передает управление соответствующему блоку catch.
Блок catch перехватывает и обрабатывает исключения блока try, объявляя тип исключения в параметре. Объявленное исключение в блоке catch должно быть исключением родительского класса (т. е. Exception) или сгенерированным типом исключения. Однако лучший подход — объявить сгенерированный тип исключения.
Блок catch всегда следует за блоком try. Как только управление выходит из блока try, вернуть его обратно в блок try невозможно.
Синтаксис
Вы связываете обработчики исключений с блоком try , предоставляя один или несколько блоков catch непосредственно после блока try . Никакой код не может находиться между концом блока try и началом первого блока catch .
try {
} catch (ExceptionType name) {
}
Блок catch содержит код, который выполняется, если и когда вызывается обработчик исключений. Система выполнения вызывает обработчик исключений, когда обработчик является первым в стеке вызовов, ExceptionType которого соответствует типу выброшенного исключения. Система считает совпадением, если брошенный объект может быть легально присвоен аргументу обработчика исключений.
Перехват аргументов блока
Блоки перехвата принимают один аргумент, тип исключения, которое они должны перехватывать (обрабатывать). Эти аргументы могут варьироваться от очень специфического типа исключения до очень общей универсальной категории исключений.
Пример
Ниже приведены два обработчика исключений для метода writeList :
try {
} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
Содержимое блока захвата
Содержимое блока catch — это то, что вы хотите, чтобы произошло при возникновении исключения (например, когда доступ к файлу не существует). Вы можете либо распечатать сообщение, либо иметь код, который делает что-то для исправления ошибки (например, имя файла еще раз.
Блокировка сообщений Catch (отображение описания исключения)
Вы можете напечатать любое сообщение внутри блока catch.
Использование toString()
Throwable переопределяет метод toString() (определенный Object), так что он возвращает строку, содержащую описание исключения. Вы можете отобразить это описание в операторе println(), просто передав исключение в качестве аргумента. Например, блок catch в предыдущей программе можно переписать так:
catch (ArithmeticException e) {
System.out.println("Exception: " + e);
a = 0; // set a to zero and continue
}
Exception: java.lang.ArithmeticException: / by zero
- getMessage() : возвращает сообщение об ошибке, специфичное для каждого типа исключения. Соедините это с оператором println.
- printStackTrace() : печатает тип ошибки и место ее возникновения в программе. Эти методы особенно полезны для отладки и поиска причины исключения.
- В каждом блоке try должен быть хотя бы один блок catch.
- Блоки try могут иметь несколько блоков catch. См. пример справа.
- Блоки catch должны идти сразу после блока try, с которым они связаны.
Наконец блоки
Ключевое слово finally используется для создания блока кода, следующего за блоком try. Блок finally всегда выполняется независимо от того, произошло исключение или нет. Используя блок finally, он позволяет запускать любые операторы типа очистки, которые вы хотите выполнить, независимо от того, что происходит в защищенном коде. Блок finally появляется в конце блока catch. блоки finally используются для аннулирования ссылок на объекты и закрытия потоков ввода-вывода.
Блок finally всегда выполняется при выходе из блока try . Это гарантирует, что блок finally будет выполнен даже в случае возникновения неожиданного исключения. Но finally полезен не только для обработки исключений — он позволяет программисту избежать случайного обхода кода очистки с помощью return , continue или break . Помещение кода очистки в блок finally всегда является хорошей практикой, даже если исключений не ожидается.
Система выполнения всегда выполняет операторы в блоке finally независимо от того, что происходит в блоке try . Так что это идеальное место для уборки.
Синтаксис
finally {
// cleanup code
}
Следующий блок finally для метода writeList очищает, а затем закрывает PrintWriter и FileWriter .
finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
if (f != null) {
System.out.println("Closing FileWriter");
f.close();
}
}
- Блоки finally являются необязательным дополнением к блокам try/catch.
- Наконец, блоки используются для кода, который вы хотите запускать независимо от того, что происходит с вашим кодом.
- Это последнее, что выполняется, и они будут выполняться каждый раз, когда вы запускаете свою программу.
- Одно из применений блока finally — убедиться, что файл закрыт в конце программы.
private List<Integer> list;
private static final int SIZE = 10;
public void writeList() {
PrintWriter out = null;
try {
System.out.println("Entered try statement");
FileWriter f = new FileWriter("OutFile.txt");
out = new PrintWriter(f);
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " + list.get(i));
}
}
// catch blocks
catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
}
catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
// finally block
finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
if (f != null) {
System.out.println("Closing FileWriter");
f.close();
}
}
}
Когда используются вложенные блоки try , сначала выполняется внутренний блок try . Любое исключение, созданное во внутреннем блоке try, перехватывается в соответствующем блоке catch. Если соответствующий блок catch не найден, то проверяется блок catch внешнего блока try . Этот процесс продолжается до тех пор, пока не будут исчерпаны все вложенные операторы try. Если соответствующий блок catch не найден, программа аварийно завершается.
посетите вложенный блок try-catch .
Перехват нескольких исключений
Как вы, возможно, знаете, в Java мы можем использовать несколько блоков catch для обработки нескольких исключений.
Пример :
catch (IOException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
catch (SQLException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
}
Пример :
catch(IOException | SQLException ex){
logger.error(ex);
throw new MyException(ex.getMessage());
}
Приятного обучения
Присоединяйтесь к группе Mouad Oumous Java в WhatsApp
Присоединяйтесь к каналу Telegram Mouad Oumous ПРИСОЕДИНЯЙТЕСЬ
Поддержите нашу публикацию, подписавшись на нее
Начало работы с Spring Boot: подробное руководство для начинающих Spring Boot Security | система единого входа | OAuth2 с Okta Наиболее часто задаваемый вопрос на собеседовании на основе потока Java8 — часть 2 Руководство по сопоставлению объектов с помощью ModelMapper в Java Кодирование: сведение массива в Javascript Наиболее часто задаваемый вопрос на собеседовании на основе потока Java8 — часть 1
![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































