logo

أنواع الاستثناءات في جافا

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

ويمكن تصنيف الاستثناءات إلى طريقتين:

  1. الاستثناءات المضمنة
    • استثناء محدد
    • استثناء لم يتم التحقق منه
  2. الاستثناءات المحددة من قبل المستخدم
أنواع الاستثناءات في جافا

استثناء مدمج

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

استثناء محدد

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

CheckedExceptionExample.java

الأبجدية من الأرقام
 import java.io.*; class CheckedExceptionExample { public static void main(String args[]) { FileInputStream file_data = null; file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/Hello.txt'); int m; while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); } } 

في الكود أعلاه، نحاول قراءة مرحبا.txt الملف وعرض بياناته أو محتواه على الشاشة. يطرح البرنامج الاستثناءات التالية:

  1. ال FileInputStream (اسم الملف) يلقي المنشئ FileNotFoundException يتم التحقق من الاستثناء.
  2. ال يقرأ() طريقة FileInputStream الطبقة يلقي IOEException .
  3. ال يغلق() تقوم الطريقة أيضًا بطرح IOException.

انتاج:

أنواع الاستثناءات في جافا

كيفية حل الخطأ؟

هناك طريقتان أساسيتان يمكننا من خلالهما حل هذه الأخطاء.

1) تحدث الاستثناءات في الطريقة الرئيسية. يمكننا التخلص من أخطاء الترجمة هذه من خلال إعلان الاستثناء في الطريقة الرئيسية باستخدام الرميات نحن نعلن فقط عن IOException، وليس FileNotFoundException، بسبب العلاقة بين الوالدين والطفل. فئة IOException هي الفئة الأصلية لـ FileNotFoundException، لذلك سيتم تغطية هذا الاستثناء تلقائيًا بواسطة IOException. وسنعلن الاستثناء بالطريقة التالية:

 class Exception{ public static void main(String args[]) throws IOException { ... ... } 

إذا قمنا بتجميع الكود وتشغيله، فستختفي الأخطاء وسنرى بيانات الملف.

خوارزمية جدولة جولة روبن
أنواع الاستثناءات في جافا

2) يمكننا أيضًا التعامل مع هذه الاستثناءات باستخدام حاول الالتقاط لكن الطريقة التي استخدمناها أعلاه ليست صحيحة. علينا أن نعطي رسالة ذات معنى لكل نوع استثناء. ومن خلال القيام بذلك، سيكون من السهل فهم الخطأ. سنستخدم كتلة محاولة الالتقاط بالطريقة التالية:

Exception.java

 import java.io.*; class Exception{ public static void main(String args[]) { FileInputStream file_data = null; try{ file_data = new FileInputStream('C:/Users/ajeet/OneDrive/Desktop/programs/Hell.txt'); }catch(FileNotFoundException fnfe){ System.out.println('File Not Found!'); } int m; try{ while(( m = file_data.read() ) != -1) { System.out.print((char)m); } file_data.close(); }catch(IOException ioe){ System.out.println('I/O error occurred: '+ioe); } } } 

سوف نرى رسالة خطأ مناسبة 'لم يتم العثور على الملف!' على وحدة التحكم لأنه لا يوجد مثل هذا الملف في ذلك الموقع.

أنواع الاستثناءات في جافا

الاستثناءات غير المحددة

ال غير محدد الاستثناءات هي عكس ذلك تمامًا التحقق استثناءات. لن يقوم المترجم بالتحقق من هذه الاستثناءات في وقت الترجمة. بكلمات بسيطة، إذا طرح برنامج استثناءً لم يتم التحقق منه، وحتى لو لم نتعامل معه أو نعلن عنه، فلن يعطي البرنامج خطأً في الترجمة. يحدث هذا عادةً عندما يقدم المستخدم بيانات سيئة أثناء التفاعل مع البرنامج.

ملاحظة: فئة RuntimeException قادرة على حل كافة الاستثناءات التي لم يتم التحقق منها بسبب العلاقة بين الطفل والأصل.

UncheckedExceptionExample1.java

 class UncheckedExceptionExample1 { public static void main(String args[]) { int postive = 35; int zero = 0; int result = positive/zero; //Give Unchecked Exception here. System.out.println(result); } } 

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

انتاج:

أنواع الاستثناءات في جافا

UncheckedException1.java

وإلا إذا كان Java
 class UncheckedException1 { public static void main(String args[]) { int num[] ={10,20,30,40,50,60}; System.out.println(num[7]); } } 

انتاج:

أنواع الاستثناءات في جافا

في الكود أعلاه، نحاول الحصول على العنصر الموجود في الموضع 7، لكن طول المصفوفة هو 6. يتم تجميع الكود بنجاح، ولكنه يطرح ArrayIndexOutOfBoundsException في وقت التشغيل.

استثناء محدد من قبل المستخدم

في جافا ، لدينا بالفعل بعض فئات الاستثناء المضمنة مثل ArrayIndexOutOfBoundsException , NullPointerException ، و استثناء حسابي . يقتصر تشغيل هذه الاستثناءات على بعض الشروط المحددة مسبقًا. في Java، يمكننا كتابة فئة الاستثناء الخاصة بنا عن طريق توسيع فئة الاستثناء. يمكننا طرح الاستثناء الخاص بنا على شرط معين باستخدام الكلمة الأساسية throw. لإنشاء استثناء محدد من قبل المستخدم، يجب أن تكون لدينا المعرفة الأساسية به ال حاول الالتقاط كتلة و يرمي الكلمة الرئيسية .

لنكتب أ برنامج جافا وإنشاء استثناء محدد من قبل المستخدم.

UserDefinedException.java

 import java.util.*; class UserDefinedException{ public static void main(String args[]){ try{ throw new NewException(5); } catch(NewException ex){ System.out.println(ex) ; } } } class NewException extends Exception{ int x; NewException(int y) { x=y; } public String toString(){ return ('Exception value = '+x) ; } } 

انتاج:

أنواع الاستثناءات في جافا

وصف:

في الكود أعلاه، قمنا بإنشاء فئتين، أي: UserDefinedException و استثناء جديد . ال UserDefinedException لديه طريقتنا الرئيسية، و استثناء جديد class هي فئة الاستثناء المعرفة من قبل المستخدم، والتي تمتد استثناء . في ال استثناء جديد فئة، نقوم بإنشاء متغير س من النوع عدد صحيح وتعيين قيمة له في المنشئ. بعد تعيين قيمة لهذا المتغير، نعيد رسالة الاستثناء.

في ال UserDefinedException الطبقة، لقد أضفنا أ حاول الالتقاط حاجز. في قسم المحاولة، نطرح الاستثناء، على سبيل المثال، استثناء جديد وتمرير عدد صحيح إليها. سيتم تمرير القيمة إلى فئة NewException وإرجاع رسالة. نلتقط هذه الرسالة في كتلة الالتقاط ونعرضها على الشاشة.

تسجيل الخروج من حساب جوجل على الاندرويد

الفرق بين الاستثناء المحدد وغير المحدد

نعم / لا استثناء محدد استثناء لم يتم التحقق منه
1. يتم التحقق من هذه الاستثناءات في وقت الترجمة. تتم معالجة هذه الاستثناءات في وقت الترجمة أيضًا. هذه الاستثناءات تتعارض تمامًا مع الاستثناءات المحددة. لا يتم التحقق من هذه الاستثناءات ومعالجتها في وقت الترجمة.
2. هذه الاستثناءات هي فئات فرعية مباشرة من الاستثناء ولكنها غير ممتدة من فئة RuntimeException. إنها الفئات الفرعية المباشرة لفئة RuntimeException.
3. يعطي الكود خطأ في الترجمة في حالة قيام إحدى الطرق بطرح استثناء محدد. المترجم غير قادر على معالجة الاستثناء بمفرده. يتم تجميع الكود دون أي خطأ لأن الاستثناءات تفلت من إشعار المترجم. هذه الاستثناءات هي نتائج الأخطاء التي أنشأها المستخدم في منطق البرمجة.
4. تحدث هذه الاستثناءات غالبًا عندما يكون احتمال الفشل مرتفعًا جدًا. تحدث هذه الاستثناءات في الغالب بسبب أخطاء البرمجة.
5. تتضمن الاستثناءات المحددة الشائعة IOException، وDataAccessException، وInterruptedException، وما إلى ذلك. تتضمن الاستثناءات الشائعة التي لم يتم التحقق منها ArithmeticException وInvalidClassException وNullPointerException وما إلى ذلك.
6. يتم نشر هذه الاستثناءات باستخدام الكلمة الأساسية throws. يتم نشر هذه تلقائيا.
7. يجب توفير حظر المحاولة والمحاولة النهائية للتعامل مع الاستثناء المحدد. في حالة الاستثناء غير المحدد فهو ليس إلزاميا.

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

ArithmeticException, ArrayIndexOutOfBoundExceptions, ClassNotFoundExceptions إلخ، تأتي في فئة استثناء مدمج . في بعض الأحيان، لا تكون الاستثناءات المضمنة كافية لشرح أو وصف مواقف معينة. لوصف هذه المواقف، يتعين علينا إنشاء استثناءاتنا الخاصة عن طريق إنشاء فئة استثناء كفئة فرعية من فئة الاستثناء استثناء فصل. هذه الأنواع من الاستثناءات تأتي في فئة استثناء محدد من قبل المستخدم .