Блок finally выполняется всегда? Ловушки JVM и System.exit() **Перевод:** Блок finally выполняется всегда? Ловушки JVM и System.exit()
```html
مرحباً بالجميع! أنا مبتدئ في Java وأحاول فهم معالجة الاستثناءات. يربكني كتلة `finally`. في الكتب المدرسية يكتبون أنها تُنفذ دائمًا، بغض النظر عن وجود استثناء أم لا. لكنني وجدت عدة أمثلة حيث يبدو أن الأمر ليس كذلك.
على سبيل المثال، هذا الكود:
```java
public class FinallyTest {
public static void main(String[] args) {
try {
System.out.println("في try");
System.exit(0);
} catch (Exception e) {
System.out.println("في catch");
} finally {
System.out.println("في finally");
}
}
}
```
كنت أتوقع أن أرى "في finally"، لكن البرنامج انتهى بدون هذا الإخراج. لماذا؟ `System.exit(0)` ليس استثناءً، إنه إنهاء عادي.
ومثال آخر. إذا كان في كتلة `try` يوجد `return`، فهل سيتم تنفيذ `finally` على أي حال؟ سمعت أن نعم، لكنني أريد التأكد. وماذا سيحدث إذا تم رمي استثناء في `finally` أيضًا؟ هل سيتجاوز الاستثناء من `t
```