Блок finally
Часть раздела Логика и управление потоком путешествия по Java на Coddy. Урок 41 из 59.
Блок finally содержит код, который будет выполнен после блоков try-catch независимо от того, произойдёт исключение или нет. Обычно он используется для операций очистки, таких как закрытие файлов или соединений с базой данных.
Вот базовая структура блока try-catch-finally:
try {
// Код, который может вызвать исключение
} catch (ExceptionType e) {
// Код для обработки исключения
} finally {
// Код, который всегда выполняется
}Рассмотрим пример со счётчиком:
int counter = 0;
try {
int result = 10 / 0;
// Это вызовет исключение
counter = 1;
} catch (ArithmeticException e) {
counter = 2;
} finally {
counter = 3;
// Это всегда выполнится
}После выполнения приведённого выше кода counter содержит:
3
Тип в скобках catch определяет, какие ошибки обрабатывает этот блок. Два распространённых типа — ArithmeticException, возникающий при целочисленном делении на ноль, и NumberFormatException, возникающий из-за Integer.parseInt(), когда текст не является числом. Один блок catch может обрабатывать несколько типов одновременно:
try {
int value = Integer.parseInt(text);
int result = 10 / value;
} catch (ArithmeticException | NumberFormatException e) {
// обрабатывает оба
} finally {
// всегда выполняется
}Использование вместо этого Exception является более общим: такой блок обрабатывает оба этих исключения и любое другое исключение.
Задание
ЛегкоСоздайте метод с именем processNumber, который принимает два аргумента:
- Строку (
number) для преобразования в целое число - Логическое значение (
shouldThrow), определяющее, следует ли выбросить исключение
Метод должен:
- Инициализировать переменную результата значением 0
- В блоке try:
- Если shouldThrow равно true, разделить 10 на 0
- В противном случае преобразовать строку number в целое число и сохранить его в result
- В блоке catch: установить для result значение -1
- В блоке finally: добавить 100 к result
- Вернуть result в виде строки
Попробуйте сами
import java.util.Scanner;
public class Main {
public static String processNumber(String number, boolean shouldThrow) {
// Напишите свой код здесь
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String number = scanner.nextLine();
boolean shouldThrow = Boolean.parseBoolean(scanner.nextLine());
System.out.println(processNumber(number, shouldThrow));
}
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Многомерные массивы
Основы 2D-массивовДоступ к элементам 2D-массиваВложенные циклы с 2D-массивамиПовторение - 2D-массивыСложение и вычитание матрицРваные массивы3D-массивы и вышеРаспространённые паттерны 2D-массивовПовторение - всё о массивах2HashMap Часть 1
Что такое HashMap?Объявление HashMapДоступ к значениямПроверка существования ключаИзменение словарейИтоги - HashMap3HashMap. Часть 2
Методы HashMapИтерация с keySet()Итерация с entrySet()Вложенный HashMapПовторение - Управление складомПовторение - Операции HashMap6Продвинутое управление потоком
Операторы метокВыражение switchСопоставление шаблоновОхранные клаузыИтоги - управление потоком9Проект - Счетчик уникальных слов
Ввод и хранение текстаОбработка словПотренируйтесь самостоятельно: Онлайн-компилятор Java