قراءة وفهم رسائل الأخطاء
رسالة الخطأ ليست عدوًّا: نتعلّم قراءتها كخريطة تدلّنا على مكان الخطأ ونوعه.
- تحدد رقم السطر ونوع الخطأ ووصفه من رسالة المترجم.
- تقرأ رسالة الاستثناء وتتبّع المكدّس Stack Trace.
- تترجم أشهر رسائل الأخطاء والاستثناءات إلى أسبابها.
- تستخدم رسالة الخطأ دليلًا لتحديد الموقع الدقيق للخطأ.
١رسالة الخطأ صديقك
عندما يظهر خطأ يرتبك كثير من المبتدئين من النص الإنجليزي الطويل ويتجاهلونه. لكن رسالة الخطأ هي أهم دليل لديك: تخبرك ماذا حدث، وأين حدث، وأحيانًا لماذا. تعلّم قراءتها يوفر عليك معظم وقت التصحيح.
٢تشريح رسالة خطأ الصياغة
رسائل المترجم في NetBeans تأتي بهذا الشكل الثابت:
public class Main { public static void main(String[] args) { int count = 3; String msg = "عدد الطلاب " + count System.out.println(msg); }}
السطر الثاني من الرسالة يعرض السطر نفسه، والعلامة ^ تشير إلى المكان الذي توقف فيه المترجم، وهو هنا نهاية السطر حيث كان ينتظر ;.
٣قاموس أشهر رسائل المترجم
| الرسالة | معناها | الحل المعتاد |
|---|---|---|
';' expected | تتوقع فاصلة منقوطة | أضف ; في نهاية الجملة |
cannot find symbol | اسم غير معروف: متغير أو دالة أو كلاس | تحقق من الإملاء وحالة الأحرف، وأن المتغير معرّف قبل استخدامه |
incompatible types: String cannot be converted to int | وضع قيمة من نوع في متغير من نوع آخر | غيّر نوع المتغير أو حوّل القيمة |
missing return statement | دالة تعيد قيمة لكن لا يوجد return | أضف return بالقيمة المناسبة |
variable k might not have been initialized | استخدام متغير قبل إعطائه قيمة | أعطه قيمة ابتدائية مثل int k = 0; |
reached end of file while parsing | قوس { غير مغلق | أضف } الناقصة، واستخدم Alt+Shift+F لتنسيق الكود |
')' expected | قوس ) ناقص | أكمل الأقواس في الشرط أو الاستدعاء |
class, interface, enum, or record expected | كود خارج الكلاس، غالبًا بسبب } زائدة | احذف القوس الزائد |
مثال: رسالتان في برنامج واحد
public class Main { static int square(int x) { int r = x * x; } public static void main(String[] args) { int k; System.out.println(k); }}
الحل: أضف return r; قبل نهاية الدالة square، واكتب int k = 0;
٤تشريح رسالة خطأ زمن التنفيذ
رسالة الاستثناء أطول، لكنها منظمة. اقرأها من الأعلى:
بعدها تأتي أسطر تبدأ بـ at تُسمّى تتبّع المكدّس Stack Trace: تبيّن سلسلة الدوال التي كانت تعمل لحظة الخطأ. السطر الأول منها هو مكان حدوث الخطأ، والأسطر التالية هي من استدعى هذه الدالة.
public class Main { static double average(int total, int count) { return total / count; } public static void main(String[] args) { System.out.println("بداية البرنامج"); double a = average(250, 0); System.out.println(a); }}
نقرأ: الخطأ قسمة على صفر، حدث في الدالة average في السطر 3، والتي استُدعيت من main في السطر 7. إذن نصلح إما الدالة (نتحقق أن count ليس صفرًا)، أو الاستدعاء (لا نمرّر صفرًا).
عندما يبدأ التتبّع من مكتبة جافا
أحيانًا تظهر أولًا أسطر من داخل مكتبات جافا مثل java.base/java.util.Scanner. هذه ليست أخطاء في جافا، بل في طريقة استخدامنا لها. تجاوزها وابحث عن أول سطر فيه اسم ملفك مثل Main.java.
السطر المهم هو الأخير: Main.main(Main.java:6)، أي سطر nextInt() في برنامجنا.
٥قاموس أشهر الاستثناءات
| الاستثناء | متى يحدث؟ | مثال |
|---|---|---|
ArithmeticException: / by zero | قسمة عدد صحيح على صفر | 10 / 0 |
InputMismatchException | إدخال لا يطابق نوع دالة القراءة | كتابة «abc» عند nextInt() |
NumberFormatException | تحويل نص لا يمثل رقمًا | Integer.parseInt("12a") |
NullPointerException | استخدام كائن لم يُنشأ بعد (قيمته null) | استدعاء دالة من متغير قيمته null |
ArrayIndexOutOfBoundsException | رقم خانة خارج حدود المصفوفة | a[3] ومصفوفة طولها 3 |
StringIndexOutOfBoundsException | رقم حرف خارج طول النص | "Ali".charAt(5) |
٦التحذيرات Warnings
إلى جانب الأخطاء الحمراء يعرض NetBeans تحذيرات بلون أصفر ⚠️. التحذير لا يمنع تشغيل البرنامج، لكنه ينبهك إلى شيء غالبًا غير مقصود:
- متغير معرّف لكنه غير مستخدم:
The value of the local variable x is not used. - استيراد غير مستخدم:
Unused import. - كائن Scanner لم يُغلق.
توقّع وتحقّق
في الرسالة Main.java:12: error: ';' expected في أي سطر الخطأ؟
ما معنى cannot find symbol؟
في تتبّع المكدّس، أي سطر يحدد مكان الخطأ في برنامجك؟
أي استثناء يظهر عند a[5] ومصفوفة طولها 5؟
الخلاصة
- ابدأ دائمًا بأول رسالة خطأ.
- رسالة المترجم: الملف ثم رقم السطر ثم error ثم الوصف، والعلامة ^ تشير إلى الموضع.
- رسالة الاستثناء: نوعه وتفاصيله، ثم أسطر at التي يبيّن أولها مكان الخطأ.
- تجاوز أسطر مكتبات جافا وابحث عن أول سطر فيه اسم ملفك.
- التحذيرات لا تمنع التشغيل لكنها تنبّه إلى مشكلة محتملة.