English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليمية Java الأساسية

تحكم العملية في Java

مجموعات Java Array

Java موجهة الأهداف (I)

Java موجهة الأهداف (II)

Java موجهة الأهداف (III)

معالجة الاستثناءات Java

قوائم Java List

Java Queue (الصف)

مجموعات Java Map

مجموعات Java Set

Java إدخال/إخراج (I/O)

Java Reader/Writer

مواضيع أخرى في Java

Java التقاطع ومعالجة الاستثنائيات

في هذا الدليل، سنتعلم كيفية معالجة الاستثنائيات في Java باستخدام أمثلة.

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

لنأخذ مثالاً.

مثال 1: بلاك ساتشات التقاط متعددة

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 {
  // كود
} 
  // بلاك ساتش
}

مثال 2: التقاط多个 استثناءات في بلاك ساتش واحد

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 بصورة ضمنية. مما يعني أننا لا يمكننا تخصيص أي قيمة لمعامل التقاط.

التقاط استثناءات أساسية

عند التقاط多个 استثناءات في بلاك ساتش واحد، يتم تطبيق هذه القاعدة بشكل عام على القاعدة التخصصية.

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

لنأخذ مثالاً.

مثال 3: التقاط استثناءات أساسية فقط

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.

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

لنأخذ مثالاً.

مثال 4: استقبال الفئة الرئيسية والفروع

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. لذلك،نقوم بإنشاء خطأ في التجميع.