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: |

4How to customize a Telegram channel? The group also hosted discussions on committing arson, Judge Hui said, including setting roadblocks on fire, hurling petrol bombs at police stations and teaching people to make such weapons. The conversation linked to arson went on for two to three months, Hui said. The best encrypted messaging apps Informative Private channels are only accessible to subscribers and don’t appear in public searches. To join a private channel, you need to receive a link from the owner (administrator). A private channel is an excellent solution for companies and teams. You can also use this type of channel to write down personal notes, reflections, etc. By the way, you can make your private channel public at any moment.
from us


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