أهم 30 سؤالاً وأجوبة حول التعامل مع الاستثناءات [للمستجدين وذوي الخبرة]
نشرت: 2020-09-29معالجة الاستثناءات هي مفهوم يتم تنفيذه في الخوارزميات للتعامل مع أخطاء وقت التشغيل المحتملة ، والتي قد تعطل التدفق الطبيعي للبرنامج. بعض الأخطاء التي يمكن معالجتها باستخدام هذا المفهوم هي:
- درجة بدون استثنائات
- IOException
- SQLException
- RemoteException
- استثناء وقت التشغيل:
- استثناء حسابي
- NullPointerException
- NumberFormatException
- IndexOutOfBoundsException
- مؤشر مجموعة خارج الحدود استثناء
- StringIndexOutOfBoundsException
ميزة هذا التطبيق هي منع تعطل البرنامج إذا كان هناك استثناء أثناء تنفيذ البرنامج. بدون معالجة الاستثناءات ، سيرمي البرنامج خطأ عندما يواجه استثناء ، ولن يتم تنفيذ باقي البرنامج. ومع ذلك ، سيعطي تطبيق هذا المفهوم حلاً بديلاً يتم فيه تنفيذ بقية البرنامج إذا كانت مستقلة فيما يتعلق بالاستثناء الذي تم تكبده. لمعرفة المزيد ، تحقق من دورات علوم البيانات لدينا.
قراءة: يجب أن تقرأ 30 سؤالاً وأجوبة مقابلة سيلينيوم: الدليل النهائي
الاستثناء معالجة أسئلة وأجوبة المقابلة
1. ماذا تقصد بالاستثناء؟
إنها حالة غير طبيعية تحدث أحيانًا عند تنفيذ البرنامج. إنه يعطل التدفق الطبيعي للبرنامج. من الضروري معالجة هذا الاستثناء ؛ خلاف ذلك ، يمكن أن يتسبب في إنهاء البرنامج فجأة.
2. اشرح كيف يمكن معالجة الاستثناءات في Java. ما هي آلية معالجة الاستثناءات وراء العملية؟

هناك ثلاثة أجزاء لآلية معالجة الاستثناءات. تسمى هذه:
- جرّب الحظر: قسم الكود الذي تمت محاولة تنفيذه ومراقبته أولاً بحثًا عن أي استثناء قد يحدث.
- كتلة Catch: إذا تم طرح أي استثناء بواسطة كتلة "try" ، فسيتم اكتشافه بواسطة قسم الكود هذا.
- أخيرًا الحظر: يتم دائمًا تنفيذ الكود الموجود في هذا القسم بغض النظر عن الاستثناءات التي تم اكتشافها في كتلة "try" ، إن وجدت. حتى إذا لم يكن هناك استثناء ، فسيتم تنفيذ الكود الموجود ضمن هذه الكتلة.
3. هل من الممكن الاحتفاظ بالعبارات الأخرى بين الكتل "try" و "catch" و "final"؟
لا يوصى بتضمين أية بيانات بين أقسام كتل 'try' و 'catch' و 'final' لأنها تشكل وحدة واحدة كاملة لآلية معالجة الاستثناءات.
يحاول
{
// الكود الذي يتم رصده للاستثناءات.
}
// لا يمكنك الاحتفاظ بالبيانات هنا
catch (استثناء ex)
{
// قبض على الاستثناءات التي تم إلقاؤها عن طريق كتلة المحاولة ، إن وجدت.
}
// لا يمكنك الاحتفاظ بالبيانات هنا
أخيرا
{
// يتم تنفيذ هذه الكتلة دائمًا بغض النظر عن الاستثناءات.
}
4. هل سيكون من الممكن تضمين كتلة "try" فقط بدون كتلتي "catch" و "أخيرًا"؟
هذا من شأنه أن يعطي خطأ في التجميع. من الضروري أن يتم اتباع كتلة "try" إما بكتلة "catch" أو "أخيرًا" ، إن لم يكن كلاهما. هناك حاجة لإحدى الكتل "catch" أو "final" بحيث لا ينقطع تدفق معالجة الاستثناءات.
5. هل سيكون من الممكن الاحتفاظ بالبيانات بعد الكتلة "النهائية" إذا كان عنصر التحكم يعود من الكتلة النهائية نفسها؟
سيؤدي هذا إلى حدوث خطأ في حظر الصيد لا يمكن الوصول إليه. هذا لأن عنصر التحكم سيعود من الكتلة "النهائية" نفسها. سيفشل المترجم في تنفيذ الكود بعد السطر مع الاستثناء. هذا هو السبب في أن التنفيذ سيظهر خطأ رمز لا يمكن الوصول إليه.
هل تحلم بالدراسة في الخارج؟ هذا هو البرنامج المناسب لك6. اشرح خطأ كتلة الصيد الذي لا يمكن الوصول إليه.
في حالة كتل الصيد المتعددة ، يكون الترتيب الذي يتم وضع كتل الصيد فيه من الأكثر تحديدًا إلى الأكثر عمومية. بمعنى ، يجب أن تأتي الفئات الفرعية للاستثناء أولاً ، ثم تتبعها الفئات الممتازة. في حالة الاحتفاظ بالفئات الفائقة أولاً ، متبوعة بالفئات الفرعية بعدها ، سيُظهر المترجم خطأ كتلة catch لا يمكن الوصول إليه.
العامة استثناء مناولة
{
الرئيسية العامة الثابتة الفراغ (سلسلة [] args)
{
يحاول
{
int i = Integer.parseInt ("اختبار") ؛
// ستطرح هذه العبارة NumberFormatException // لأن الإدخال المحدد عبارة عن سلسلة ، بينما // التنسيق المحدد هو عدد صحيح.
}
catch (استثناء ex)
{
System.out.println (“هذه الكتلة تتعامل مع جميع أنواع الاستثناءات”) ؛
// يمكن معالجة جميع أنواع الاستثناءات في // هذه الكتلة نظرًا لأنها فئة فائقة من الاستثناءات.
}
catch (NumberFormatException ex)
{
// سيعطي هذا خطأ وقت الترجمة
// ستصبح هذه الكتلة غير قابلة للوصول مثل
// سيتم بالفعل اكتشاف الاستثناء بواسطة كتلة catch أعلاه
}
}
}
7. ضع في اعتبارك ثلاث عبارات في كتلة "try": البيان 1 ، والبيان 2 ، والبيان 3. يتبعه كتلة "catch" للقبض على الاستثناءات التي حدثت أثناء تنفيذ كتلة "try". افترض أنه تم طرح الاستثناء على البيان 2. هل تعتقد أنه سيتم تنفيذ البيان 3؟
لن يتم تنفيذ البيان 3. إذا تم طرح استثناء بواسطة كتلة "try" في أي وقت ، فلن يتم تنفيذ الكود المتبقي بعد الاستثناء. بدلاً من ذلك ، سيأتي التحكم في التدفق مباشرة إلى كتلة "catch".
8. التفريق بين الخطأ والاستثناء في جافا.
يتمثل الاختلاف الرئيسي بين الخطأ والاستثناء في أنه بينما يحدث الخطأ بسبب البيئة التي يعمل فيها JVM (Java Virtual Machine) ، فإن الاستثناءات ناتجة عن البرنامج نفسه. على سبيل المثال ، يعد OutOfMemory خطأ يحدث عندما تستنفد JVM ذاكرتها.
ولكن ، NullPointerException هو استثناء يتم مواجهته عندما يحاول البرنامج الوصول إلى كائن فارغ. التعافي من خطأ غير ممكن. ومن ثم ، فإن الحل الوحيد للخطأ هو إنهاء التنفيذ. ومع ذلك ، من الممكن حل الاستثناءات باستخدام كتل المحاولة والتقاط أو عن طريق إعادة الاستثناءات إلى وظيفة المتصل.
يجب أن تقرأ: أسئلة وأجوبة مقابلة جافا
9. ما هي أنواع الاستثناءات؟ اشرح لهم.
هناك نوعان من الاستثناءات:
الاستثناءات المحددة
نوع الاستثناءات التي يعرفها المترجم ويتعرف عليها. يمكن التحقق من هذه الاستثناءات في وقت الترجمة فقط. لذلك ، يطلق عليهم أيضًا استثناءات وقت الترجمة. يمكن التعامل مع هذه إما عن طريق استخدام كتل المحاولة والتقاط أو باستخدام شرط رمي. إذا لم يتم التعامل مع هذه الاستثناءات بشكل مناسب ، فسوف ينتج عنها أخطاء في وقت الترجمة. تتضمن الأمثلة الفئات الفرعية لـ java.lang.Exception باستثناء RunTimeException.
استثناءات لم يتم التحقق منها
نوع الاستثناءات التي لم يتعرف عليها المترجم. تحدث في وقت التشغيل فقط. ومن ثم ، يطلق عليهم أيضًا استثناءات وقت التشغيل. لم يتم فحصها في وقت الترجمة. ومن ثم ، حتى بعد التجميع الناجح ، يمكن أن يتسببوا في إنهاء البرنامج قبل الأوان إذا لم يتم التعامل معه بشكل مناسب. تتضمن الأمثلة الفئات الفرعية لـ java.lang.RunTimeException و java.lang.Error.
10. ما هو التسلسل الهرمي للاستثناءات في Java؟
يعد java.lang.Throwable فئة فائقة لجميع الأخطاء والاستثناءات في Java. تقوم هذه الفئة بتوسيع فئة java.lang.Object. يجب أن تكون وسيطة كتلة catch هي نوعها أو نوع صنفها الفرعي فقط. تشتمل فئة Throwable على فئتين فرعيتين:
- java.lang.Error: هذه فئة ممتازة لجميع أنواع الأخطاء في Java. الأخطاء الشائعة المدرجة تحت هذا هي -
- java.lang.VirtualMachineError: تحت هذا -
- StackOverFlowError
- خطأ عدم وجود ذاكرة كافية
- java.lang.Assertion خطأ
- java.lang.LinkageError: تحت هذا -
- NoClassDefFoundError
- غير متوافق مع ClassChangeError
- java.lang.VirtualMachineError: تحت هذا -
- java.lang.Exception: هذه فئة فائقة لجميع أنواع الاستثناءات في Java. الاستثناءات الشائعة بموجب هذا هي -
- استثناء وقت التشغيل
- استثناء حسابي
- NumberFormatException
- NullPointerException
- مؤشر مجموعة خارج الحدود استثناء
- ClassCastException
- java.lang.InterruptException
- java.lang.IOException
- java.lang.SQLException
- java.lang.ParseException
- استثناء وقت التشغيل
11. ما هي استثناءات وقت التشغيل في Java؟ أعط بعض الأمثلة.
تسمى الاستثناءات التي تحدث في وقت التشغيل استثناءات وقت التشغيل. لا يستطيع المترجم التعرف على هذه الاستثناءات ، مثل الاستثناءات التي لم يتم التحقق منها. يتضمن جميع الفئات الفرعية لـ java.lang.RunTimeException و java.lang.Error. تتضمن الأمثلة NumberFormatException و NullPointerException و ClassCastException و ArrayIndexOutOfBoundException و StackOverflowError وما إلى ذلك.
12. تحديد OutOfMemoryError في Java.
إنها الفئة الفرعية لـ java.lang.Error التي تتم مواجهتها عند نفاد ذاكرة JVM.
13. التفريق بين NoClassDefFoundError و ClassNotFoundException في Java.
يحدث كل من NoClassDefFoundError و ClassNotFoundException عندما لا يتم العثور على فئة معينة في وقت التشغيل. ومع ذلك ، فإنها تحدث في ظل سيناريوهات مختلفة. NoClassDefFoundError هو عندما يحدث خطأ لأن فئة معينة كانت موجودة في وقت الترجمة لكنها كانت مفقودة في وقت التشغيل. يحدث ClassNotFoundException عند مواجهة استثناء لأحد التطبيقات التي تحاول تحميل فئة في وقت التشغيل والتي لم يتم تحديثها في classpath.
14. هل يتم تنفيذ الكتلة "أخيرًا" إذا أعاد أحد الكتل "try" أو "catch" التحكم؟
يتم دائمًا تنفيذ الكتلة "النهائية" بغض النظر عما إذا كانت كتل try أو catch تعيد التحكم أم لا.
15. هل من الممكن طرح استثناء يدويًا؟ إذا كانت الإجابة بنعم ، اشرح كيف.
من الممكن طرح استثناء يدويًا. يتم ذلك باستخدام الكلمة الأساسية "رمي". صيغة طرح استثناء يدويًا هي
رمي InstanceOfThrowableType ؛
فيما يلي مثال على استخدام الكلمة الأساسية "رمي" لطرح استثناء يدويًا.

يحاول
{
NumberFormatException ex = new NumberFormatException () ، // هنا نقوم بإنشاء كائن لـ NumberFormatException بشكل صريح
رمي السابق // رمي كائن NumberFormatException صراحة باستخدام رمي الكلمة الأساسية
}
catch (NumberFormatException ex)
{
System.out.println ("في هذه الكتلة ، يمكن التقاط كائن NumberFormatException الذي تم إلقاؤه صراحة.")؛
}
قراءة: أهم 35 أسئلة وأجوبة مقابلة الربيع: الدليل النهائي
16. ماذا تقصد بإعادة طرح استثناء في Java؟
تتم معالجة الاستثناءات التي تم رفعها في كتلة "try" في كتلة "catch". إذا كانت كتلة "catch" غير قادرة على معالجة هذا الاستثناء ، فمن الممكن أن تعيد طرح نفس الاستثناء باستخدام الكلمة الأساسية "throw". هذه الآلية تسمى إعادة طرح استثناء. التنفيذ على النحو التالي:
يحاول
{
سلسلة s = خالية ؛
System.out.println (s.length ()) ؛ // هذا البيان يطرح NullPointerException
}
catch (NullPointerException ex)
{
System.out.println ("هنا يتم اكتشاف NullPointerException") ؛
رمي السابق // إعادة طرح NullPointerException
}
17. لماذا تستخدم الكلمة الأساسية "رميات" في جافا؟
إذا كان من الممكن لطريقة ما أن تطرح استثناء إذا تعذر معالجته ، فيجب أن تحدد هذا الاستثناء باستخدام الكلمة الأساسية "رميات". سيكون من المفيد لوظائف المتصل بهذه الطريقة في معالجة هذا الاستثناء. صيغة استخدام الكلمة الرئيسية "رميات" هي ،
return_type method_name (معلمة_قائمة) يطرح استثناءات قائمة
{
//الشفرة
}
هنا ، استثناءات قائمة الاستثناءات هي قائمة الاستثناءات التي قد يتم طرحها بواسطة الطريقة. يجب فصل هذه الاستثناءات بفاصلات. مثال على الكود:
العامة استثناء مناولة
{
الرئيسية العامة الثابتة الفراغ (سلسلة [] args)
{
يحاول
{
methodWithThrows () ،
}
catch (NullPointerException ex)
{
System.out.println (& quot؛ NullPointerException التي تم إلقاؤها بواسطة طريقة methodWithThrows () سيتم اكتشافها هنا & quot؛)؛
}
}
أسلوب الفراغ الثابتWithThrows () يطرح NullPointerException
{
سلسلة s = خالية ؛
System.out.println (s.length ()) ؛ // هذا البيان يطرح NullPointerException
}
}
18. يوصى غالبًا بالإبقاء على عمليات التنظيف مثل إغلاق موارد قاعدة البيانات داخل الكتلة "النهائية". لماذا هو ضروري؟
يتم دائمًا تنفيذ الكتلة "النهائية" بغض النظر عن الحقيقة إذا تم رفع الاستثناءات في كتلة "try" أو إذا كانت الاستثناءات المرفوعة عالقة في كتلة "catch" أم لا. يضمن الاحتفاظ بعمليات التنظيف في الكتلة "النهائية" تشغيل هذه العمليات في أي حال ، ولن تتأثر بالاستثناءات التي قد ترتفع أو لا ترتفع.
19. كيف تفرق بين النهائى والنهائى والنهائى فى جافا؟
أولاً ، كلمة "النهائية" هي كلمة أساسية يمكن استخدامها لإنشاء متغير أو طريقة أو فئة على أنها غير قابلة للتغيير. ببساطة ، إذا تم الإعلان عن متغير على أنه نهائي ، فبمجرد أن يتم تهيئته ، لا يمكن تغيير قيمته. إذا تم التصريح عن طريقة ما على أنها نهائية ، فلا يمكن تجاوزها أو تعديلها في الفئة الفرعية. إذا تم إعلان الفصل على أنه نهائي ، فلا يمكن مده إلى فئات أخرى.
ثانيًا ، "أخيرًا" عبارة عن كتلة تُستخدم في معالجة الاستثناءات جنبًا إلى جنب مع كتلتي "try" و "catch". يتم تنفيذ هذه الكتلة دائمًا بصرف النظر عن استثناء بارز أو إذا تمت معالجة الاستثناء الذي تم رفعه. عادةً ما يتم استخدام هذه الكتلة لإجراء عمليات تنظيف لإغلاق الموارد مثل اتصال قاعدة البيانات وموارد الإدخال / الإخراج وما إلى ذلك.
ثالثًا ، طريقة () finalize هي طريقة محمية. إنه ينتمي إلى فئة java.lang.Object. كل فئة تم إنشاؤها في Java ترث هذه الطريقة. يستدعي مؤشر ترابط أداة تجميع البيانات المهملة هذه الطريقة قبل إزالة كائن من الذاكرة. قبل إزالة كائن من الذاكرة ، تُستخدم هذه الطريقة لإجراء بعض عمليات التنظيف.
يرمي باطل محمي () رمى
{
// عمليات التنظيف
}
20. ما هي الاستثناءات المخصصة في جافا؟
يمكن طرح فئات الاستثناءات في Java وفقًا لمتطلبات تدفق البرنامج. تسمى هذه الاستثناءات الاستثناءات المعرفة من قبل المستخدم. يطلق عليهم أيضًا الاستثناءات المخصصة. يجب أن تمتد هذه الاستثناءات إلى أي فئة من الفئات في التسلسل الهرمي للاستثناءات.
21. كيف تشرح ClassCastException في Java؟
عندما يتعذر على JVM تحويل كائن من نوع إلى نوع آخر ، يتم رفع هذا الاستثناء. إنه RunTimeException.
22. التفريق بين الرمي والرمي والقابل في جافا.
أولاً ، تُستخدم الكلمة الأساسية "رمي" لطرح استثناء يدويًا في جافا. باستخدام هذه الكلمة الأساسية ، من الممكن طرح استثناء من أي طريقة أو كتلة. ومع ذلك ، من الضروري أن يكون الاستثناء من النوع java.lang.Throwable class أو ينتمي إلى إحدى الفئات الفرعية لفئة java.lang.Throwable.
ثانيًا ، يتم استخدام الكلمة الأساسية "رميات" في توقيع الأسلوب في Java. إذا كانت الطريقة قادرة على طرح استثناءات ، فيتم الإشارة إليها بهذه الطريقة. يتم التعامل مع الاستثناءات المذكورة من خلال وظائف المتصل الخاصة بها. يتم ذلك إما عن طريق استخدام كتل try and catch أو باستخدام الكلمة الأساسية throws.
ثالثًا ، يُطلق على الفئة الفائقة لجميع أنواع الأخطاء والاستثناءات في Java اسم Throwable. إنه عضو في حزمة java.lang. تثير JVM أو تعليمة الرمي مثيلات فقط من هذه الفئة أو الفئات الفرعية الخاصة بها. يجب أن تحتوي كتلة catch على وسيطة واحدة فقط ويجب أن تكون من هذا النوع أو الفئات الفرعية الخاصة به. في حالة إنشاء استثناءات مخصصة ، يجب عليهم توسيع هذه الفئة أيضًا.
23. شرح StackOverflowError في جافا.
هذا خطأ تم إلقاؤه بواسطة JVM عند تجاوز المكدس في وقت التشغيل.
24. هل من الممكن تجاوز طريقة الفئة الممتازة التي تطرح استثناء غير محدد مع استثناءات محددة في الفئة الفرعية؟
هذا غير ممكن لأنه إذا قامت طريقة الفئة الممتازة بإلقاء استثناء غير محدد ، فسيتم تجاوزه في الفئة الفرعية مع نفس الاستثناء أو أي استثناءات أخرى لم يتم التحقق منها. ولكن ، لا يمكن تجاوزه مع الاستثناءات المحددة.
25. تحديد الاستثناءات المتسلسلة في Java.
في البرنامج ، يمكن لاستثناء واحد أن يطرح العديد من الاستثناءات عن طريق إحداث تأثير الدومينو. هذا يسبب سلسلة من الاستثناءات. من المفيد معرفة موقع السبب الفعلي للاستثناء. هذا ممكن مع ميزة الاستثناءات المتسلسلة في Java. تم تقديم هذا منذ JDK 1.4. لتنفيذ الاستثناءات المتسلسلة في Java ، تم تضمين مُنشئين جديدين وطريقتين جديدتين في فئة Throwable. وهذه هي،
صانعو فئة الرمي:
- قابل للرمي (سبب قابل للرمي): السبب هو الاستثناء الذي يثير الاستثناء الحالي.
- Throwable (String msg، Throwable reason): سلسلة الرسائل هي رسالة الاستثناء. الاستثناء الذي يثير الاستثناء الحالي هو السبب هنا.
طرق الرمي الصنف:
- طريقة getCause (): يتم إرجاع السبب الحقيقي للاستثناء البارز بواسطة هذه الطريقة.
- طريقة initCause (سبب قابل للرمي): يتم تعيين سبب استثناء الاستدعاء بواسطة هذه الطريقة.
26. أي فئة يتم تعريفها على أنها فئة فائقة لجميع أنواع الأخطاء والاستثناءات في Java؟
الفئة الفائقة لجميع أنواع الأخطاء والاستثناءات هي java.lang.Throwable في Java.
27. ما الذي يمكن أن يصنف على أنه توليفة صحيحة من البلوكات ، المحاولة ، الصيد وأخيراً؟
مزيج من كتلة المحاولة والقبض.
يحاول
{
// حاول بلوك
}
catch (استثناء ex)
{
// كتلة الصيد
}
مزيج من المحاولة والمنع أخيرًا.
يحاول
{
// حاول بلوك
}
أخيرا
{
// أخيرًا منع
}
مزيج من الثلاثة: جرب ، كتلة ، أخيرًا.
يحاول
{
// حاول بلوك
}
catch (استثناء ex)
{
// كتلة الصيد
}
أخيرا
{
// أخيرًا منع
}
28. لماذا تستخدم طريقة printStackTrace ()؟
تُستخدم هذه الطريقة لطباعة معلومات مفصلة حول الاستثناء الذي حدث.
29. ما هي بعض الأمثلة على الاستثناءات المحددة؟
تتضمن بعض أمثلة الاستثناءات المحددة ClassNotFoundException و SQLException و IOException.

30. ما هي بعض الأمثلة على الاستثناءات التي لم يتم التحقق منها؟
تتضمن بعض الأمثلة على الاستثناءات غير المحددة NullPointerException و ArrayIndexOutOfBoundsException و NumberFormatException.
اقرأ أيضًا: يجب قراءة 47 أسئلة وأجوبة مقابلة OOPS للطلاب الجدد وذوي الخبرة
تغليف
إذا كنت مهتمًا بمعرفة المزيد حول البيانات الضخمة ، فراجع دبلوم PG الخاص بـ upGrad & IIIT-B في تطوير البرامج الكامل المكدس المصمم للمهنيين العاملين ويقدم أكثر من 500 ساعة من التدريب الصارم ، وأكثر من 9 مشاريع ، والمهام ، IIIT -ب حالة الخريجين ، ومشاريع التخرج العملية العملية والمساعدة في العمل مع الشركات الكبرى.
إذا كنت مهتمًا بتعلم علوم البيانات واخترت مهنة في هذا المجال ، فراجع برنامج IIIT-B & upGrad's Executive PG في علوم البيانات الذي تم إنشاؤه للمهنيين العاملين ويقدم أكثر من 10 دراسات حالة ومشاريع ، وورش عمل عملية عملية ، والإرشاد مع خبراء الصناعة ، وجهاً لوجه مع مرشدين في الصناعة ، وأكثر من 400 ساعة من التعلم والمساعدة في العمل مع الشركات الكبرى.

