جارٍ تحميل الدرس...
في نافذة الطباعة اختر «حفظ كملف PDF» كوجهة.
معمل جافا
أنواع الأخطاء، تقنية التنقيح، ومعالجة الاستثناءات برشاقة
أخطاء جافا
وقت التصريف
Compile-Time
وقت التشغيل
Runtime
الأخطاء المنطقية
Logical
int x = 5 // خطأ: ';' مطلوبة - الإصلاح: أضف فاصلة منقوطة
System.out.println(myVar); // خطأ: لا يمكن إيجاد الرمز
int myVar = 50; // الإصلاح: أعلن قبل الاستخدام
int x = "Hello"; // خطأ: أنواع غير متوافقة
String x = "Hello"; // الإصلاح: استخدم النوع الصحيحint x = 10, y = 0;
int result = x / y; // ArithmeticException: / by zero
int[] numbers = {1, 2, 3};
System.out.println(numbers[10]); // ArrayIndexOutOfBoundsException: 10int x = 10, y = 2;
int result = x - y; // كان المقصود x + y
System.out.println(result); // تطبع 8، وليس 12يوجد خطأ في الكود
أضف نداءات println
شغل البرنامج
افحص المخرجات
أصلح الخطأ
System.out.println() لتتبع الحالة قبل نقطة الفشلSystem.out.println("x = " + x);
System.out.println("y = " + y);
int result = x / y; // الانهيار يحدث هنا - التتبع يظهر بالضبط ما أدى إليهtry-catch بمعالجته برشاقة بدلا من ذلكtry {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
} catch (Exception e) {
System.out.println("Something went wrong.");
}
// الناتج: Something went wrong. (البرنامج يستمر)finally دائما، سواء حدث استثناء أم لاtry
الكود المحتمل خطؤه
catch
يعمل فقط عند حدوث خطأ
finally
يعمل دائما
استمرار البرنامج
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
} catch (Exception e) {
System.out.println("Something went wrong.");
} finally {
System.out.println("The 'try catch' is finished.");
}throwstatic void checkAge(int age) {
if (age < 18) {
throw new ArithmeticException("Access denied - must be 18+.");
}
System.out.println("Access granted!");
}try {
checkAge(15);
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
// الناتج: Error: Access denied - must be 18+.finally تغلق المورد، وهذا مطول وعرضة للأخطاءtry (FileWriter fw = new FileWriter("output.txt");
BufferedWriter bw = new BufferedWriter(fw)) {
bw.write("Hello World!");
} catch (Exception e) {
e.printStackTrace();
}
// كلا الموردين يغلقان تلقائيا، بترتيب عكسيFileWriter
يفتح أولا، يغلق أخيرا
BufferedWriter
يفتح ثانيا، يغلق أولا
| الاستثناء | السبب |
|---|---|
ArithmeticException | القسمة على صفر |
ArrayIndexOutOfBoundsException | فهرس مصفوفة غير صحيح |
NullPointerException | استخدام كائن فارغ (null) |
FileNotFoundException | الملف غير موجود |
NumberFormatException | تحويل غير صحيح من نص إلى رقم |
try-catch تمنع الانهيار بمعالجة الاستثناءات برشاقة؛ finally تعمل دائما للتنظيفthrow تتيح لك إصدار استثناءاتك الخاصة برسائل ذات معنىMahmoud Abas|معمل الاستثناءات وتصحيح الأخطاء في جافا