Объектно-ориентированное программирование на Java. Платформа Java SE. Тимур Машнин
Чтение книги онлайн.

Читать онлайн книгу Объектно-ориентированное программирование на Java. Платформа Java SE - Тимур Машнин страница 24

СКАЧАТЬ блок finally позволяет программисту избежать случайного обхода нужного кода.

      Включение необходимого для выполнения кода в блок finally всегда является хорошей практикой, даже если не ожидается никаких исключений.

      Однако блок finally не всегда может выполняться.

      Если виртуальная машина JVM завершает работу во время выполнения кода try или catch, блок finally может не выполняться.

      Аналогично, если поток, выполняющий код try или catch, прерывается или убивается, блок finally может не выполняться, даже если программа в целом продолжается.

      Блок finally – это ключевой инструмент для предотвращения утечек ресурсов.

      Закрывая файл или восстанавливая ресурсы, поместите код в блок finally, чтобы гарантировать, выполнение необходимых операций.

      Рассмотрим этот пример.

      Каким здесь может быть вывод в консоль?

      Здесь вполне возможна ситуация, когда в консоль сначала будет выведено сообщение об ошибке, а только потом вывод System.out.println.

      Так как вывод System. out является буферизированным, то есть сообщения сначала помещаются в буфер, прежде они будут выведены в консоль.

      А сообщение необработанного исключение выводится через не буферизированный вывод System.err.

      Как уже было сказано, каждый оператор try требует наличия либо catch, либо finally.

      Поэтому возможна конструкция try – finally.

      И блок finally получит управление, даже если try-блок завершится исключением.

      И блок finally получит управление, даже если try-блок завершится директивой выхода из метода.

      Однако блок finally НЕ будет вызываться, если мы убъем виртуальную машину JVM.

      При всем при этом, надо отметить, что блок finally не перехватывает исключение, и программа завершиться ошибкой при возникновении в блоке try исключения.

      Исключение перехватывает только блок catch.

      Таким образом мы разобрали почти все случаи работы операторов try, catch, throws, throw, и finally.

      Рекурсия

      В некоторых случаях нам нужно выполнять повторные вычисления.

      И мы видели циклы for и while, которые выполняют повторные вычисления.

      Теперь мы увидим гораздо более мощный механизм повторных вычислений, который называется рекурсией.

      Ранее мы определили метод square, который, принимая целое число, возвращает квадрат числа.

      Теперь мы хотели бы определить метод, который возводит в степень.

      Мы хотим определить метод, который, учитывая базу x и показатель y, вычисляет x в степени y.

      Поэтому, если y равно 2, мы вычисляем квадрат числа, как и раньше.

      Вы видите, что в этом методе мы имеем два аргумента, целые числа x и y.

      Давайте сначала попытаемся определить этот метод.

      Давайте проанализируем несколько случаев.

      Если СКАЧАТЬ