جافا — لغة تسامح كثيراً. لكن ليس كل شيء
\n\nلقد فتحت كتاباً دراسياً، وقمت بتنزيل IntelliJ IDEA وكتبت أول Hello, World! لك. تهانينا! أنت الآن تدخل عالماً حيث الفاصلة المنقوطة تحدد مصير التجميع، وكلمة null يمكن أن تفسد أمسيتك. جافا هي لغة قوية، صارمة، ومنطقية للغاية. لكن هذا المنطق بالتحديد هو ما يوقع المبتدئين في المشاكل. لماذا؟ لأن العقل يريد "كما في Python" أو "كما في JavaScript"، لكن جافا تقول: "لا يا صديقي، أعلن عن النوع أولاً".
في هذه المقالة، جمعت أكثر الأخطاء شيوعاً في تعلم جافا التي يرتكبها المبتدئون. سنحلل كل خطأ بأمثلة حقيقية، والأهم من ذلك، سأوضح لك كيفية إصلاحها. إذا كنت قد بدأت للتو في تعلم جافا من الصفر — اقرأ بعناية، فهذا سيوفر لك ساعات من التصحيح.
\n\nالخطأ رقم 1: تجاهل أنواع البيانات
\n\nجافا هي لغة شديدة التحديد في الأنواع. هذا يعني أنه لا يمكنك ببساطة تعيين سلسلة نصية لرقم. لكن المبتدئين غالباً ما يحاولون القيام بمثل هذه الحيل:
\n\nint number = "42"; // خطأ في التجميع!\n\nأو حتى أكثر إضحاكاً:
\n\nString text = 42; // خطأ أيضاً\n\nفي Python أو JavaScript كان هذا سيعمل (تقريباً). في جافا — لا. يجب الإعلان عن كل متغير بنوع محدد، ولا يمكن تغييره أثناء التنفيذ.
\n\nكيف تفعل ذلك بشكل صحيح؟
\nاستخدم التحويل الصريح للأنواع أو طرق التحويل:
\n\nint number = Integer.parseInt("42"); // الآن يعمل\nString text = String.valueOf(42); // وهذا أيضاً\n\nنصيحة: عند تعلم Java Core، تعوّد فوراً على التفكير بمصطلحات الأنواع. اسأل نفسك: "ما هو نوع هذا المتغير؟". هذا سيوفر لك من 30% من الأخطاء.
\n\nالخطأ رقم 2: نسيان main — وكل شيء ينهار
\n\nكلاسيكي. يكتب المبتدئ فئة، ويعلن فيها عن دالة، ويشغلها — ويرى خطأ:
\n\nError: Main method not found in class\n\nلماذا؟ لأن JVM يبحث عن توقيع محدد بدقة:
\n\npublic static void main(String[] args)\n\nغالباً ما يكتب المبتدئون:
\n\npublic void main() // غير صحيح!\nstatic void main() // هذا أيضاً خطأ\n\nتذكر مرة واحدة وإلى الأبد: public static void main(String[] args) — هذا ليس مجرد سطر، بل هو بوابة إلى عالم تنفيذ البرنامج.
\n\nمثال على كود صحيح:
\npublic class HelloWorld {\n public static void main(String[] args) {\n System.out.println("مرحباً، جافا!");\n }\n}\n\nإذا كنت تستخدم IntelliJ IDEA، فهي نفسها تبرز الخطأ وتقترح إنشاء main صحيح. استفد من ذلك.
الخطأ رقم 3: الخلط بين == و .equals()
\n\nهذا هو على الأرجح أكثر خطأ شائع بين المبتدئين في جافا. يقارنون السلاسل النصية باستخدام == ويتعجبون لماذا لا يعمل الشرط.
String a = new String("Java");\nString b = new String("Java");\n\nif (a == b) {\n System.out.println("متساويان"); // لن يطبع!\n}\n\nالسبب هو أن == يقارن المراجع إلى الكائنات، وليس محتواها. a و b هما كائنان مختلفان في الذاكرة.
كيف تصلح ذلك؟
\nif (a.equals(b)) {\n System.out.println("متساويان"); // الآن سيطبع\n}\n\nتذكر القاعدة: الأنواع البدائية (int, double, boolean) نقارنها باستخدام ==، الكائنات (String, Integer, الفئات الخاصة بك) — باستخدام .equals(). هذا مهم بشكل خاص عند العمل مع المجموعات واستثناءات جافا.
الخطأ رقم 4: الذعر عند رؤية NullPointerException
\n\nNullPointerException (NPE) — هو وحش يخيف جميع المبتدئين. لكنه في الواقع يقول ببساطة: "أنت تحاول استدعاء دالة لكائن غير موجود".
مثال:
\n\nString name = null;\nint length = name.length