English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدليل، سنتعلم كيفية معالجة الاستثنائيات في Java باستخدام أمثلة.
في Java 7 قبل، حتى إذا كان هناك تكرار في الكود، يجب علينا كتابة عدة كودات معالجة استثنائية للمشاكل المختلفة.
لنأخذ مثالاً.
class Main { public static void main(String[] args) { try { int array[] = new int[10]; array[10] = 30 / 0; } System.out.println(e.getMessage()); } System.out.println(e.getMessage()); } } }
نتيجة الإخراج
/ by zero
في هذا المثال قد يحدث استثناءان:
ArithmeticException - لأننا نحاول تقسيم الرقم بثلاثة.
ArrayIndexOutOfBoundsException - لأننا قمنا بإنشاء مصفوفة جديدة، حدود المصفوفة هي من 0 إلى 9، ونحاول تخصيص قيمة لفهرس 10.
نقوم بطباعة رسائل الاستثناء في بلاك ساتشين، مما يؤدي إلى تكرار الكود.
يكون تفضيل عمودية عمودية من اليمين إلى اليسار، لذا سيتم أولاً رمي ArithmeticException مع رسالة / by zero.
في إصدار Java SE 7 وما فوق، يمكننا الآن التقاط أنواع متعددة من الاستثناءات في بلاك ساتش واحد.
كل نوع استثناء يمكن معالجته من قبل بلاك ساتش يتم فصله باستخدام خط العرض (|).
جملة اللفظ هي:
try { // كود } // بلاك ساتش }
class Main { public static void main(String[] args) { try { int array[] = new int[10]; array[10] = 30 / 0; } System.out.println(e.getMessage()); } } }
نتيجة الإخراج
/ by zero
التقاط多个 استثناءات في بلاك ساتش واحد يمكن تقليل التكرار في الكود وزيادة الكفاءة.
سيكون حجم الكود الثنائي الناتج عند تجميع هذا البرنامج أكبر من البرنامج الذي يحتوي على بلاك ساتشات متعددة، لأنه ليس هناك تكرار في الكود.
ملاحظة:إذا كان بلاك ساتش يعالج استثناءات متعددة، فإن معامل التقاط هو final بصورة ضمنية. مما يعني أننا لا يمكننا تخصيص أي قيمة لمعامل التقاط.
عند التقاط多个 استثناءات في بلاك ساتش واحد، يتم تطبيق هذه القاعدة بشكل عام على القاعدة التخصصية.
ذلك يعني، إذا كان هناك سلسلة من استثناءات في بلاك ساتش، يمكن التقاط استثناء أساسي فقط وليس يمكن التقاط استثناءات متخصصة متعددة.
لنأخذ مثالاً.
class Main { public static void main(String[] args) { try { int array[] = new int[10]; array[10] = 30 / 0; } System.out.println(e.getMessage()); } } }
نتيجة الإخراج
/ by zero
نحن نعرف أن جميع استثناءات الإرث هي فروع من استثناء Exception. لذلك، لا نحتاج إلى التقاط多个 استثناءات متخصصة، بل فقط التقاط استثناء Exception.
إذا تم تحديد استثناء أساسي في بلاك ساتش، فلا تستخدم استثناء فرعي في نفس بلاك ساتش. وإلا سنحصل على خطأ في التجميع.
لنأخذ مثالاً.
class Main { public static void main(String[] args) { try { int array[] = new int[10]; array[10] = 30 / 0; catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } }
نتيجة الإخراج
Main.java:6: خطأ: يمكن أن تكون البدائل في جملة الاستثناء مرتبطة فقط بتنسيق الفرع
في هذا المثال،ArithmeticException و ArrayIndexOutOfBoundsException هما فروع لـ Exception. لذلك،نقوم بإنشاء خطأ في التجميع.