"Throwable" هو الفئة الرئيسية للفئات Error and Exception. فئة "RuntimeException" والفئات الفرعية الخاصة بها ، والفئة "خطأ" وفصولها الفرعية هي "استثناءات غير مسجلة" ، في حين أن الفئات الفرعية المتبقية لفئة "استثناء" باستثناء "RuntimeException" هي الاستثناءات المحددة. والفرق الأساسي بين الاستثناءات المحددة وغير المحددة هو أن الاستثناءات المحددة يتم فحصها بواسطة المحول البرمجي بينما لا يتحقق المحول البرمجي من الاستثناءات غير المحددة .
دعونا نناقش الاختلافات الأخرى بين الاستثناءات المحددة وغير المحددة بمساعدة مخطط المقارنة.
رسم بياني للمقارنة
أساس للمقارنة | استثناء فحصه | استثناء لم يتم التحقق منه |
---|---|---|
الأساسية | يتحقق المحول البرمجي الاستثناء المحدد. | لا يتحقق المحول البرمجي الاستثناء Unchecked. |
فئة الاستثناء | باستثناء فئة "RuntimeException" ، يتم تصنيف كل الفئات الفرعية للفئة "استثناء" ، وفئة "الخطأ" وفئاتها الفرعية "استثناء تم التحقق منه". | فئة "RuntimeException" وفئاتها الفرعية ، هي "استثناءات لم يتم التحقق منها". |
معالجة | إذا لم نتعامل مع الاستثناء المحدد ، فإن كائنات برنامج التحويل البرمجي. | حتى إذا لم نعالج الاستثناء غير المحدد ، فلن يعترض المترجم. |
التحويل البرمجي | لا يتم ترجمة البرنامج إذا كان هناك استثناء محدد غير معالج في التعليمة البرمجية للبرنامج. | يتم تجميع البرنامج بنجاح حتى إذا كان هناك استثناء غير محدد غير مُعالج في رمز البرنامج. |
تعريف الاستثناءات المحددة
الاستثناءات المحددة هي تلك الاستثناءات التي يتم فحصها بواسطة المحول البرمجي للتنفيذ السلس للبرنامج. يتحقق المحول البرمجي ما إذا كان البرنامج يمكن معالجة الاستثناءات المحددة أم لا. إذا كان التعليمة البرمجية غير قادر على معالجة الاستثناء ، يحدث خطأ في التحويل البرمجي. تعتبر كافة الفئات الفرعية للفئة "استثناء" باستثناء فئة RuntimeException هي الاستثناءات المحددة.
دعونا ندرس الاستثناء المحدد بمثال.
import java.io. *؛ class example {public static void main (String args []) {FileInputStream fis = null؛ fis = new FileInputStream ("B: /myfile.txt")؛ // منشئ هذا FileInputStream (ملف اسم الملف) يلقي FileNotFoundException وهو استثناء محدد. كثافة العمليات بينما ((k = fis.read ())! = -1) {/ / / قراءة الطريقة () من فئة FileInputStream يلقي أيضا استثناء محدد: IOException. System.out.print ((شار) ك). } fis.close () ؛ // تغلق طريقة إغلاق () دفق إدخال الملف فإنه يلقي IOException. }}
في التعليمات البرمجية أعلاه ، نحاول فتح محتويات الملف وقراءتها وعرضها. قد يحدث أن الملف غير موجود ، ثم يحدث FileNotFoundException وهو استثناء محدد. إذا لم يتم معالجة الاستثناء المعين ، فلن يسمح المترجم بالقيام بترجمة البرنامج بسلاسة. سوف تظهر خطأ وقت الترجمة. لذلك ، للتجميع السلس ، يجب أن يتم اكتشاف الاستثناء المحدد أو يتم طرحه.
تعريف استثناء لم يتم التحقق منه
الاستثناءات التي لم يتم التحقق منها هي تلك الاستثناءات التي لم يتم التحقق منها من قبل المجمع. المحول البرمجي يجمع البرنامج بنجاح حتى إذا لم يتم معالجة الاستثناءات بواسطة التعليمات البرمجية. إن الطبقة "خطأ" وفصولها الفرعية ، و "وقت التشغيل" والفئات الفرعية الخاصة بها هي الاستثناءات غير المقيدة.
دعنا نرى مثالا على استثناء غير محدد.
class example {public static void main (String args []) {int arr [] = {1،2،3،4،5}؛ System.out.println (آر [7])؛ //مؤشر مجموعة خارج الحدود استثناء. }}
في التعليمات البرمجية أعلاه ، يمكنك أن ترى أن هناك ArrayIndexOutOfBoundsException ، وأنا أحاول الوصول إلى العنصر غير موجود. لأن هذا هو استثناء غير محدد ، لن يحدث خطأ وقت التحويل البرمجي ، وسيتم تجميع الملف بدون أي خطأ. ولكن لن يتم تنفيذ البرنامج حتى يتم التعامل مع الاستثناء. لذلك ، من أجل التنفيذ السلس ، يجب أن يتم القبض على الاستثناءات أو يتم الإعلان عنها
الاختلافات الأساسية بين Checked و Unchecked Exception
- توجد استثناءات مفحوصة في معرفة المحول البرمجي في حين أن ، الاستثناءات غير المسجلة ليست في معرفة المترجم.
- باستثناء RuntimeException و Error class يتم تعليم جميع الفئات باستثناء. من ناحية أخرى ، فإن فصول RuntimeException و Error هي استثناءات غير محددة.
- إذا لم يتم التعامل مع الاستثناءات المحددة بواسطة الكود ثم كائنات المجمع. من ناحية أخرى ، إذا لم نتعامل مع الاستثناءات غير المحددة في الشفرة ، فلن يعترض المترجم.
- في حالة حدوث استثناءات محددة في التعليمة البرمجية ، فلن يتم ترجمة الشفرة ، حتى إذا لم تتم معالجة الاستثناءات غير المحددة بواسطة الشفرة ، فما زال المترجم يقوم بترميز الشفرة.
ملحوظة :
كلا الاستثناءات المحددة أو غير المقيدة يحدث بشكل قسري أثناء وقت التشغيل. يتم فحصها فقط أو إلغاء تحديدها بواسطة المحول البرمجي خلال وقت التحويل البرمجي.
استنتاج:
يجب معالجة كل الاستثناءات المحددة وغير المحددة من أجل تنفيذ البرنامج بسلاسة.