JAVA_IIBRARY Telegram 1673
Часто про блок finally пишут, что он всегда выполнится, даже если в коде случилась ошибка

Пример из разряда «классика жанра»

public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Старт");
int result = 10 / 0; // тут бахнет деление на ноль
} catch (ArithmeticException e) {
System.out.println("Ошибка: " + e.getMessage());
} finally {
System.out.println("Этот блок всё равно выполнится");
}
}
}


Да, при делении на ноль выпадет исключение, но перед завершением работы всё, что внутри finally, всё равно выполнится

Но есть ситуации, когда finally не доживёт до выполнения. Например

public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Старт");
System.exit(0); // мгновенный выход из программы
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Ошибка: " + e.getMessage());
} finally {
System.out.println("Этот блок уже не увидим");
}
}
}


Вызов System.exit() или убийство процесса извне (например, kill PID) не даст finally сработать

Теперь к более интересному

Представим, что у нас есть цепочка методов, где в конце мы хотим сделать какие-то действия в любом случае — например, зафиксировать результат в логах или отправить уведомление

Пусть методы вызывают друг друга вот так:

mainfirstLogicsecondLogicthirdLogicfourthLogic

Пример

public static void main(String[] args) {
try {
firstLogic();
} finally {
System.out.println("FINALLY MAIN"); // логируем результат
}
}

public static void firstLogic() {
secondLogic();
}

public static void secondLogic() {
try {
thirdLogic();
} finally {
System.out.println("FINALLY SECOND"); // отправляем уведомление
}
}

public static void thirdLogic() {
fourthLogic();
}

public static void fourthLogic() {
System.out.println("D");
throw new RuntimeException();
}


В этой схеме исключение может вылететь и в thirdLogic, и в fourthLogic
Нам всё равно, где именно упало — код внутри finally, в main и secondLogic всё равно выполнится

Это удобно, когда логика сложная и методы вызывают друг друга

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12



tgoop.com/Java_Iibrary/1673
Create:
Last Update:

Часто про блок finally пишут, что он всегда выполнится, даже если в коде случилась ошибка

Пример из разряда «классика жанра»

public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Старт");
int result = 10 / 0; // тут бахнет деление на ноль
} catch (ArithmeticException e) {
System.out.println("Ошибка: " + e.getMessage());
} finally {
System.out.println("Этот блок всё равно выполнится");
}
}
}


Да, при делении на ноль выпадет исключение, но перед завершением работы всё, что внутри finally, всё равно выполнится

Но есть ситуации, когда finally не доживёт до выполнения. Например

public class FinallyExample {
public static void main(String[] args) {
try {
System.out.println("Старт");
System.exit(0); // мгновенный выход из программы
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Ошибка: " + e.getMessage());
} finally {
System.out.println("Этот блок уже не увидим");
}
}
}


Вызов System.exit() или убийство процесса извне (например, kill PID) не даст finally сработать

Теперь к более интересному

Представим, что у нас есть цепочка методов, где в конце мы хотим сделать какие-то действия в любом случае — например, зафиксировать результат в логах или отправить уведомление

Пусть методы вызывают друг друга вот так:

mainfirstLogicsecondLogicthirdLogicfourthLogic

Пример

public static void main(String[] args) {
try {
firstLogic();
} finally {
System.out.println("FINALLY MAIN"); // логируем результат
}
}

public static void firstLogic() {
secondLogic();
}

public static void secondLogic() {
try {
thirdLogic();
} finally {
System.out.println("FINALLY SECOND"); // отправляем уведомление
}
}

public static void thirdLogic() {
fourthLogic();
}

public static void fourthLogic() {
System.out.println("D");
throw new RuntimeException();
}


В этой схеме исключение может вылететь и в thirdLogic, и в fourthLogic
Нам всё равно, где именно упало — код внутри finally, в main и secondLogic всё равно выполнится

Это удобно, когда логика сложная и методы вызывают друг друга

👉 Java Portal

BY Java Portal | Программирование


Share with your friend now:
tgoop.com/Java_Iibrary/1673

View MORE
Open in Telegram


Telegram News

Date: |

According to media reports, the privacy watchdog was considering “blacklisting” some online platforms that have repeatedly posted doxxing information, with sources saying most messages were shared on Telegram. End-to-end encryption is an important feature in messaging, as it's the first step in protecting users from surveillance. Matt Hussey, editorial director at NEAR Protocol also responded to this news with “#meIRL”. Just as you search “Bear Market Screaming” in Telegram, you will see a Pepe frog yelling as the group’s featured image. How to Create a Private or Public Channel on Telegram? Invite up to 200 users from your contacts to join your channel
from us


Telegram Java Portal | Программирование
FROM American