Зачем нужна Try Finally без Catch

Ответ

Try-Finally без Catch используется, когда нужно гарантировать выполнение кода освобождения ресурсов (закрытие файлов, соединений и т.д.), даже если исключение не обрабатывается в текущем методе.

Пример:

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
try {
    String line = reader.readLine();
    // работаем с line, но исключения не ловим
} finally {
    reader.close(); // ресурс будет закрыт в любом случае
}

Ключевые моменты:

  1. Гарантирует выполнение cleanup-кода
  2. Позволяет исключению прокидываться выше по стеку вызовов
  3. Часто используется с ресурсами, требующими закрытия

В Java 7+ лучше использовать try-with-resources, который автоматически закрывает ресурсы.

Ответ 18+ 🔞

А, ну это ж классика, блядь! Try-Finally без Catch — это как взять у соседа дрель, нахуй всё просверлить, а потом, даже если ты её сломал, всё равно вернуть, но уже в говняном виде. Главное — вернуть, сука!

Смотри, вот тебе живой пример, чтоб понятно было, ёпта:

BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
try {
    String line = reader.readLine();
    // делаем что-то с этой строкой, и пусть всё летит к чёртовой матери, если сломается
} finally {
    reader.close(); // а вот эту хуйню мы выполним ВСЕГДА, даже если всё вокруг горит синим пламенем
}

В чём тут, блядь, соль, понимаешь?

  1. Гарантия, что за собой уберёшь. Это как взять стакан, выпить, а потом хоть с бодуна, хоть с похмелья, но помыть его, блядь. Ресурс (файл, соединение, какая-нибудь сокетная хуйня) будет закрыт в любом случае. Иначе он так и будет висеть, как манда с ушами, память жрать.
  2. Исключение не задерживается. Ты не пытаешься его тут же починить или проглотить. Ты говоришь: «На, блядь, лови, вызывающий код, разбирайся сам!». Оно спокойно летит наверх по стеку вызовов, а твой finally блок в это время тихо и героически делает своё чёрное дело — прибирается в бардаке.
  3. Для ресурсов, которые надо закрыть — идеально. Файлы, сетевые соединения, всякие стримы — им всем в конце жизненного цикла нужно сказать «прощай», иначе они превращаются в цифровых зомби.

Но слушай сюда, самое охуительное! Начиная с Java 7, умные дядьки придумали try-with-resources. Это вообще, блядь, песня! Теперь можно не париться с этим finally, он там под капотом сам всё сделает. Выглядит это как магия, ёбана:

try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) {
    String line = reader.readLine();
    // работаем, не боимся
} // здесь reader.close() вызовется АВТОМАТИЧЕСКИ, нахуй! Даже если вылетит исключение.

Красота, да? Но старый добрый try-finally надо знать, а то вдруг окажешься на древнем проекте, где Java 6, и будешь сидеть, как пизда бородавчатая, и не знать, как файл закрыть.