Avatar ·

Блок 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 ```