الاستثناءات المتسلسلة في جافا

الاستثناءات المتسلسلة في جافا

تسمح الاستثناءات المتسلسلة في 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 هي رسالة الاستثناء والسبب هو الاستثناء الذي يسبب الاستثناء الحالي.

طرق دعم الاستثناءات المتسلسلة

  1. الحصول على السبب () : تقوم هذه الطريقة بإرجاع السبب الفعلي للاستثناء.
  2. 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.

مزايا الاستثناءات المتسلسلة:

مزايا الاستثناءات المتسلسلة مذكورة أدناه:

  • يساعد هذا الاستثناء في تصحيح الأخطاء من خلال توفير تفاصيل حول الأسباب الأساسية والجذرية.
  • إنه يبسط معالجة الأخطاء عن طريق تمكين نشر سياق الاستثناء الكامل.
  • يؤدي ذلك إلى تحسين إمكانية تتبع الأخطاء في التطبيقات المعقدة.

مساوئ الاستثناءات المتسلسلة:

  • إذا لم يتم استخدامه بشكل صحيح، فقد يجعل تتبع المكدس أطول وأصعب في القراءة.
  • قد يؤدي الإفراط في الاستخدام إلى ظهور رسائل خطأ مربكة إذا كانت الاستثناءات متسلسلة بشكل غير ضروري.
  • يجب على المطورين التأكد من ربط الأسباب ذات المغزى؛ وإلا فإنه يمكن تضليل أثناء التصحيح.
مسابقة مقترحة تحرير الاختبار 3 أسئلة

ما هو الغرض الرئيسي من الاستثناءات المتسلسلة في Java؟

  • أ

    لإخفاء السبب الجذري للاستثناء

  • ب

    لربط استثناء مع آخر

  • ج

    لتحسين أداء التعليمات البرمجية

  • د

    لإصلاح أخطاء وقت التشغيل تلقائيًا

توضيح:

تسمح الاستثناءات المتسلسلة بربط استثناء بآخر لإظهار السبب الجذري.

ما هي الطريقة المستخدمة لتعيين سبب الاستثناء؟

  • أ

    الحصول على رسالة ()

  • ب

    setException()

  • ج

    initCause()

  • د

    initCause()

توضيح:

تقوم الطريقة initCause() بتعيين السبب الأساسي للاستثناء.

في المثال، ما نوع الاستثناء الذي تم تعيينه كسبب لـ NumberFormatException؟

  • أ

    IOEException

  • ب

    استثناء حسابي

  • ج

    NullPointerException

  • د

    RuntimeException

توضيح:

يقوم المثال بتعيين NullPointerException كسبب لـ NumberFormatException.

الاستثناءات المتسلسلة في جافاتم إكمال الاختبار بنجاح   2 /3 دقة :  0% قم بالدخول لمشاهدة الشرح 1 /3 1 /3 < Previous التالي >