البرمجة

تنفيذ عمليات الإرجاع في Java

في الواقع، الكود الذي قدمته يعمل بدون إثارة استثناء (exception) لأن الكود في الجزء الخاص بـ finally يُنفذ دائمًا سواء حدث استثناء أم لا. عندما يحدث استثناء داخل الـ try بسبب عملية القسمة على صفر، يتم إلقاء الاستثناء ولكن يتم تجاهل أي قيمة تم إرجاعها من داخل الـ finally. وبما أن الاستثناء قد أُلقي ولم يتم التعامل معه داخل الـ catch، فإن البرنامج ينهار ولا يتم طباعة أي شيء.

عندما يتم وضع عبارة الـ return داخل الـ finally، يتم تنفيذها بعد نجاح أو فشل الكود في الـ try، وبما أنه لا يوجد استثناء معيب (unchecked exception) يحدث، فإن البرنامج يكمل تنفيذه بشكل طبيعي ويُطبع النص الذي تم إرجاعه.

أما عندما يتم وضع عبارة الـ return خارج الـ finally، فإنها تتم تنفيذها بعد أن تحاول معالجة الاستثناء وتلقي الكود في الـ catch، وبما أن الاستثناء لم يتم التعامل معه وقد تم إلقاؤه مرة أخرى، فإنه يتم توقف البرنامج ولا يتم طباعة أي شيء.

إذا كان لديك أي استفسار إضافي، فلا تتردد في طرحه.

المزيد من المعلومات

بالطبع! عندما يحدث استثناء (exception) في الجزء الخاص بـ try، يتم تنفيذ الكود في الـ catch الذي يلتقط الاستثناء ويتعامل معه. إذا تم رمي (throw) الاستثناء مرة أخرى داخل الـ catch، فإنه يمكن التعامل معه في الـ catch الخارجي إذا وجد، وإلا فإن البرنامج يتوقف ولا يتم تنفيذ الكود في الـ finally.

أيضًا، يجب أن يكون هناك عودة (return) في الـ finally، إذا كان هناك إرجاع (return) في الـ try أو الـ catch، حيث يتم تنفيذ الكود في الـ finally بعد الإرجاع في الـ try أو الـ catch.

للتوضيح، يمكنك النظر إلى الكود التالي:

java
public static void main(String[] args) { System.out.println(echo("jjj")); } public static String echo(String str) { try { int a = 1/0; return "try"; } catch (Exception e) { throw e; } finally { System.out.println("finally"); return "finally"; } }

في هذا الكود، سيتم طباعة “finally” وسيتم إرجاع “finally” دون رمي أي استثناء.

زر الذهاب إلى الأعلى