شرح فهم التسلسل الهرمي للاستثناءات في Java
نشرت: 2022-03-08مصطلح "استثناء" هو اختصار لـ "حدث استثنائي". في Java ، يعد الاستثناء في الأساس حدثًا يحدث أثناء تنفيذ البرنامج ويعطل التدفق الطبيعي للبرنامج. الاستثناءات غير مرغوب فيها وغير متوقعة في الغالب ، والتي تنشأ بشكل عام في وقت التشغيل أو التجميع. يجب التعامل مع كل هذه الاستثناءات لضمان تشغيل البرنامج في التدفق الطبيعي.
ومع ذلك ، قبل التعامل مع الاستثناءات ، من المفيد معرفة الأنواع المختلفة من الاستثناءات الموجودة في Java. من خلال هذه المقالة ، دعنا نلقي نظرة على الأنواع المختلفة من الاستثناءات في Java والتسلسل الهرمي للاستثناءات التي تتبعها.
جدول المحتويات
التسلسل الهرمي للاستثناءات في Java
يبدأ التسلسل الهرمي للاستثناءات في لغة برمجة Java بفئة Throwable - التي تأتي من فئة الكائن وهي فئتها الفرعية المباشرة بينما تقدم فئة Exception جميع فروع Throwable هذه إلى فئتين فرعيتين - Error و Exception. فيما يلي مخطط انسيابي لفهم التسلسل الهرمي لاستثناء Java بشكل أفضل:
تقدم فئة الاستثناءات جميع الاستثناءات التي قد تحتاج إلى التعامل معها أثناء العمل باستخدام لغة برمجة Java. تتضمن بعض الأمثلة المعروفة والمعروفة لمثل هذه الاستثناءات NullPointerException و ClassNotFoundException و IllegalArgumentException وما إلى ذلك.
من ناحية أخرى ، تهتم فئة Error بالمشكلات الأكثر خطورة في بنية برنامج Java ولا يتم الاهتمام بها في كود التطبيق. بعض الأمثلة على الأخطاء في Java هي InternalError و AssertionError و OutOfMemoryError وما إلى ذلك.
تنقسم الاستثناءات في Java إلى فئتين:
- الاستثناءات التي تم التحقق منها - تُعرف أيضًا باسم استثناءات وقت الترجمة.
- الاستثناءات التي لم يتم التحقق منها - تُعرف أيضًا باسم استثناءات وقت التشغيل.
إحدى النقاط المهمة التي يجب ملاحظتها في هذا المنعطف هي أن الاستثناءات غير المحددة هي جميع الفئات الفرعية لفئة RuntimeException. سنتحدث أكثر عن الاستثناءات المحددة وغير المحددة لاحقًا في هذه المقالة. ولكن قبل ذلك ، دعونا نلقي نظرة على كيفية اختلاف الأخطاء والاستثناءات في عملهم بحيث لا يكون هناك أي لبس.
الأخطاء والاستثناءات في Java - كيف تختلف؟
تشير الوثائق الرسمية للغة برمجة Java إلى الأخطاء على أنها تكرارات أثناء برمجة Java الخاصة بك والتي - "تشير إلى المشكلات الخطيرة التي يجب ألا يحاول تطبيق معقول اكتشافها." تتضح خطورة الأخطاء من الطريقة التي يتم بها هذا البيان. من الواضح أن هذا يشير إلى مجموعة المشاكل التي قد يواجهها برنامجك والتي لا يمكن أن يتعافى منها بدون إعادة هيكلة الكود أو تعديل بنية تطبيق Java.
لنلقِ نظرة على طريقة Java التي ستؤدي إلى حدوث خطأ:
طباعة باطلة عامة ثابتة (سلسلة S) {
مطبوعات)؛
}
في الكود المذكور أعلاه ، تعمل طريقة print () كطريقة متكررة تستمر في استدعاء نفسها مرارًا وتكرارًا ، حتى تصل إلى الحد الأقصى للحجم المسموح به لمكدس الخيط في Java. في هذه المرحلة ، يتم الخروج من التنفيذ باستخدام أمر شائع جدًا - StackOverflowError ، والذي يقرأ شيئًا مثل:
استثناء في موضوع java.lang.StackOverflowError "الرئيسي"
في StackOverflowErrorExample.print (StackOverflowErrorExample.java:3)
كما يوضح المثال أعلاه ، تقدم الطريقة مثالاً ، ولكن لا يمكن معالجة هذا الخطأ في الكود نفسه. لذلك ، يتوقف البرنامج ببساطة عن التنفيذ لأن الضرر لا يمكن إصلاحه. كحل ، يجب تعديل الكود.
على عكس الأخطاء ، تشير الاستثناءات إلى الشروط التي يمكن اكتشافها من خلال تطبيق معقول. تتضمن الاستثناءات في Java المشكلات التي قد تحدث إما في وقت الترجمة أو أثناء وقت التشغيل. تحدث هذه الاستثناءات بشكل متكرر في جميع التطبيقات - خاصة أثناء مرحلة الاختبار وتصحيح الأخطاء. نتيجة لذلك ، يمكن معالجة الاستثناءات في Java داخل البرنامج نفسه للتأكد من أن الكود يدير تدفقه الطبيعي.
الآن ، دعنا نتحدث أكثر قليلاً عن التسلسل الهرمي للاستثناءات في Java من خلال النظر في الاستثناءات المحددة وغير المحددة.
الاستثناءات المحددة وغير المحددة في Java
كما ذكرنا سابقًا ، يمكن أن تحدث الاستثناءات في برنامج Java إما أثناء وقت الترجمة أو أثناء وقت التشغيل. هذا ما يعطينا النوعين العريضين من الاستثناءات الموجودة في Java. هنا ننظر إلى هذين الاستثناءين بالتفصيل.
استثناءات وقت الترجمة
تُعرف الاستثناءات التي تحدث في وقت الترجمة باسم استثناءات وقت الترجمة. تسمى هذه أيضًا الاستثناءات المحددة نظرًا لحقيقة أنك تحتاج إلى التحقق منها صراحة في برنامج Java الخاص بك والتعامل معها في الكود نفسه. يتم فحص الاستثناءات لفئات مثل InterruptException و IOException والمزيد.
لنلقِ نظرة على طريقة يمكنها التعامل مع استثناء محدد:
ملف الكتابة باطل عام () {
try (BufferedWriter b_w = new BufferedWriter (new FileWriter (“myFile.txt”))) {
b_w.write ("اختبار") ؛
} catch (IOException ioe) {
ioe.printStackTrace () ،
}
}
كما ترى ، هناك عبارتان في كتلة try في الكود أعلاه -
- إنشاء الكائن - BufferedWriter
- استخدام الكائن في الكتابة إلى الملف
يمكن لكل من هاتين العبارتين طرح IOException. IOException ، كونه استثناءً محددًا ، يحتاج إلى التعامل معه إما من قبل المتصل أو الطريقة. في المثال أعلاه ، يمكنك رؤية الاستثناء يتم التعامل معه داخل الطريقة نفسها.
استثناءات وقت التشغيل
على عكس استثناءات وقت الترجمة التي يتم طرحها أثناء وقت الترجمة ، يمكن طرح استثناءات وقت التشغيل أو الاستثناءات غير المحددة "في أي وقت" ، وهو ما يعني بشكل أساسي وقت التشغيل. نتيجة لذلك ، لا تحتاج الطرق إلى استخدام كتل catch-and-throw بشكل صريح للتعامل مع هذه الاستثناءات التي لم يتم التحقق منها. تتضمن بعض الفئات التي ترث استثناءات وقت التشغيل غير المحددة - NullPointerException و ArithmeticException وما إلى ذلك.
لنلقِ نظرة على جزء من كود Java يطرح استثناء NullPointerException غير محدد ولم يتم التعامل معه في جزء من التعليمات البرمجية بخلاف ما سبق. ها هو:
writeToFile () باطلة عامة {
محاولة (BufferedWriter b_w = خالية) {
b_w.write ("اختبار") ؛
} catch (IOException ioe) {
ioe.printStackTrace () ،
}
}
عند استدعاء الطريقة أعلاه ، سيرمي البرنامج NullPointerException لأن الكائن BufferedWriter فارغ. هذا ما سيقرأه الاستثناء مثل:
استثناء في الموضوع الرئيسي "java.lang.NullPointerException
في IOExceptionExample.writeToFile (IOExceptionExample.java:10)
في IOExceptionExample.main (IOExceptionExample.java:17)
ختاما
مع ذلك ، وصلنا إلى نهاية هذه المدونة حول فهم التسلسل الهرمي للاستثناءات في Java. يرجى أن تضع في اعتبارك أن هذه ليست بأي حال من الأحوال تغطية شاملة للاستثناءات في Java وكيفية التعامل معها. لذلك ، يجب عليك التعمق أكثر وتعريض نفسك لمختلف الاستثناءات الممكنة لترى كيف تعمل. ستعمل معرفة التعامل مع الاستثناءات على إعدادك لمهنة ناجحة كمطور متكامل لأن الاستثناءات تشكل أساسيات أي تطبيق.
في upGrad ، لدينا دورة تطوير مكدس كاملة متخصصة - برنامج PG التنفيذي في تطوير البرمجيات - تخصص في تطوير Full Stack - حيث نأخذك عبر جميع الفروق الدقيقة في تطوير البرامج من خلال التركيز بشكل رئيسي على تطوير Full Stack. نقترح عليك التحقق من الدورة وربما حجز مقعد قريبًا!
1. أي فئة موجودة في الجزء العلوي من التسلسل الهرمي للاستثناءات في Java؟
توجد فئة Throwable في الجزء العلوي من التسلسل الهرمي للاستثناءات في Java.
2. ما هي أنواع الاستثناءات المختلفة الموجودة في Java؟
تم إلغاء تحديد Java بالإضافة إلى الاستثناءات المحددة. تسمى الاستثناءات المحددة أيضًا استثناءات وقت الترجمة ، بينما تُعرف الاستثناءات غير المحددة أيضًا باسم استثناءات وقت التشغيل.
3. كيف يتم التعامل مع الاستثناءات في Java؟
يعتبر try-catch أسهل طريقة للتعامل مع الاستثناءات في Java. يجب وضع الجزء الرئيسي من الكود الذي تريد تشغيله في كتلة try ، بينما يلتقط واحد أو أكثر من كتل catch جميع الاستثناءات التي يطرحها الكود. ستكتشف هذه الطريقة أي نوع من استثناءات Java التي يتم إلقاؤها.