الاستثناءات المتسلسلة في جافا
تسمح الاستثناءات المتسلسلة في Java بربط استثناء واحد بآخر، أي أن استثناء واحد يصف سبب استثناء آخر.
- على سبيل المثال، ضع في اعتبارك موقفًا تُلقي فيه إحدى الطرق ملفًا استثناء حسابي بسبب محاولة القسمة على صفر.
- ولكن السبب الجذري للخطأ هو فشل الإدخال/الإخراج الذي جعل المقسوم عليه صفرًا.
- في مثل هذه الحالات، تساعد الاستثناءات المتسلسلة على نشر الأسباب الأساسية والأساسية للخطأ.
مثال : يوضح المثال التالي كيفية استخدام الاستثناءات المتسلسلة في Java.
Java // Working of chained exceptions public class Geeks { public static void main ( String [] args ) { try { // Creating an exception NumberFormatException ex = new NumberFormatException ( 'Primary Exception' ); // Setting the cause of the exception ex . initCause ( new NullPointerException ( 'Root cause of the exception' )); // Throwing the exception with a cause throw ex ; } catch ( NumberFormatException ex ) { // Displaying the primary exception System . out . println ( 'Caught Exception: ' + ex ); // Displaying the root cause of the exception System . out . println ( 'Cause of Exception: ' + ex . getCause ()); } } }
الإخراج
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
ملحوظة: تسمح لنا الاستثناءات المتسلسلة والمعروفة أيضًا باسم الاستثناءات المتداخلة بربط سبب مع استثناء في Java. يكون هذا مفيدًا عندما نريد نشر معلومات حول السبب الأصلي للاستثناء.
البنائين
- قابل للرمي (سبب قابل للرمي) : حيث يكون السبب هو الاستثناء الذي يسبب الاستثناء الحالي.
- رمي (سلسلة رسالة سبب رمي) : حيث msg هي رسالة الاستثناء والسبب هو الاستثناء الذي يسبب الاستثناء الحالي.
طرق دعم الاستثناءات المتسلسلة
- الحصول على السبب () : تقوم هذه الطريقة بإرجاع السبب الفعلي للاستثناء.
- initCause (سبب قابل للرمي) : تحدد هذه الطريقة سبب استثناء الاستدعاء.
مثال: استخدام رسالة مخصصة مع استثناءات متسلسلة
في Java، يمكننا ربط الاستثناءات باستخدام مُنشئ فئة Throwable.
Java // Use a custom message with chained exception public class Geeks { public static void main ( String [] args ) { try { // Code that might throw an exception int [] n = new int [ 5 ] ; int divisor = 0 ; for ( int i = 0 ; i < n . length ; i ++ ) { int res = n [ i ] / divisor ; System . out . println ( res ); } } catch ( ArithmeticException e ) { // Creating a new exception with // the original as the cause throw new RuntimeException ( 'Error: Division by zero occurred' e ); } } }
الإخراج:
توضيح: في هذا المثال، مجموعة من الأعداد الصحيحة وتعيين المقسوم عليه على 0.
- داخل كتلة المحاولة، تحاول تقسيم كل عنصر من عناصر المصفوفة على 0 مما يؤدي إلى ظهور استثناء حسابي.
- تم اكتشاف ArithmeticException في كتلة الالتقاط حيث يتم إنشاء RuntimeException جديد مع الاستثناء الأصلي، أي ArithmeticException كسبب له.
- نظرًا لعدم اكتشاف RuntimeException الذي يعرض تتبع المكدس بما في ذلك RuntimeException وArithmeticException.
مزايا الاستثناءات المتسلسلة:
مزايا الاستثناءات المتسلسلة مذكورة أدناه:
- يساعد هذا الاستثناء في تصحيح الأخطاء من خلال توفير تفاصيل حول الأسباب الأساسية والجذرية.
- إنه يبسط معالجة الأخطاء عن طريق تمكين نشر سياق الاستثناء الكامل.
- يؤدي ذلك إلى تحسين إمكانية تتبع الأخطاء في التطبيقات المعقدة.
مساوئ الاستثناءات المتسلسلة:
- إذا لم يتم استخدامه بشكل صحيح، فقد يجعل تتبع المكدس أطول وأصعب في القراءة.
- قد يؤدي الإفراط في الاستخدام إلى ظهور رسائل خطأ مربكة إذا كانت الاستثناءات متسلسلة بشكل غير ضروري.
- يجب على المطورين التأكد من ربط الأسباب ذات المغزى؛ وإلا فإنه يمكن تضليل أثناء التصحيح.
ما هو الغرض الرئيسي من الاستثناءات المتسلسلة في Java؟
- أ
لإخفاء السبب الجذري للاستثناء
- ب
لربط استثناء مع آخر
- ج
لتحسين أداء التعليمات البرمجية
- د
لإصلاح أخطاء وقت التشغيل تلقائيًا
تسمح الاستثناءات المتسلسلة بربط استثناء بآخر لإظهار السبب الجذري.
ما هي الطريقة المستخدمة لتعيين سبب الاستثناء؟
- أ
الحصول على رسالة ()
- ب
setException()
- ج
initCause()
- د
initCause()
تقوم الطريقة initCause() بتعيين السبب الأساسي للاستثناء.
في المثال، ما نوع الاستثناء الذي تم تعيينه كسبب لـ NumberFormatException؟
- أ
IOEException
- ب
استثناء حسابي
- ج
NullPointerException
- د
RuntimeException
يقوم المثال بتعيين NullPointerException كسبب لـ NumberFormatException.
تم إكمال الاختبار بنجاح 2 /3 دقة : 0% قم بالدخول لمشاهدة الشرح 1 /3 1 /3 < Previous التالي >