المصفوفات في Java: كيفية التصريح والتهيئة؟ دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة: لماذا يعاني حتى مطوري Java المخضرمين من هذا السؤال؟

\n\n

إذا كنت قد بحثت يومًا عن "How do I declare and initialize an array in Java?"، فأنت لست وحدك. هذا السؤال على Stack Overflow حصد مئات الآلاف من المشاهدات وما زال في ازدياد. قد يبدو الأمر بسيطًا، ولكن الشيطان يكمن في التفاصيل كما هو الحال دائمًا. Java هي لغة ذات كتابة صارمة، وبناء جملة المصفوفات فيها قد يربك المبتدئ.

\n\n

في هذه المقالة، سنستعرض جميع الطرق الممكنة للتصريح عن المصفوفات وتهيئتها في Java. ستتعرف على الفرق بين int[] arr و int arr[]، وكيفية إنشاء مصفوفات الكائنات بشكل صحيح، وكذلك كيفية تجنب الوقوع في فخ NullPointerException. هيا بنا!

\n\n

1. الأساسيات: ما هي المصفوفة في Java؟

\n\n

المصفوفة في Java هي حاوية تخزن عددًا ثابتًا من العناصر من نفس النوع. على عكس Python أو JavaScript، حيث يمكن أن تكون المصفوفات ديناميكية، يتم تحديد حجم المصفوفة في Java عند الإنشاء ولا يمكن تغييره.

\n\n
int[] numbers; // تصريح (declaration)\nnumbers = new int[5]; // تهيئة (initialization) — تخصيص ذاكرة لـ 5 عناصر\n
\n\n

في السطر الأول، نخبر المترجم: "أريد إنشاء متغير سيشير إلى مصفوفة من الأعداد الصحيحة". في السطر الثاني، نخصص ذاكرة لـ 5 عناصر. فقط بعد ذلك تصبح المصفوفة جاهزة للاستخدام.

\n\n

2. طرق التصريح عن المصفوفة

\n\n

في Java، يوجد بناءان جملة للتصريح عن المصفوفة. كلاهما صحيح، لكن مجتمع Java (والمعايير الرسمية لترميز Oracle) يوصي بالخيار الأول.

\n\n

الطريقة 1: نوع البيانات + أقواس مربعة قبل اسم المتغير

\n
int[] myArray;\nString[] names;\ndouble[] prices;\n
\n\n

الطريقة 2: أقواس مربعة بعد اسم المتغير (نمط C/C++)

\n
int myArray[];\nString names[];\ndouble prices[];\n
\n\n

أيهما تختار؟ الخيار الأول يُقرأ بشكل أكثر طبيعية: int[] myArray — "مصفوفة أعداد صحيحة باسم myArray". الخيار الثاني قد يكون مربكًا، خاصة عند التصريح عن عدة متغيرات في سطر واحد:

\n\n
int[] arr1, arr2; // كلا المتغيرين مصفوفات\nint arr3[], arr4; // arr3 مصفوفة، arr4 عدد صحيح عادي (خطأ!)\n
\n\n

لذلك، استخدم دائمًا نوع[] اسم.

\n\n

3. تهيئة المصفوفة: 4 طرق مثبتة

\n\n

بعد التصريح، يجب تهيئة المصفوفة. إليك كيفية القيام بذلك بشكل صحيح.

\n\n

الطريقة 1: إنشاء مصفوفة فارغة مع تحديد الحجم

\n
int[] numbers = new int[10]; // مصفوفة من 10 عناصر، جميعها تساوي 0 (افتراضيًا)\nString[] words = new String[5]; // مصفوفة من 5 سلاسل، جميعها تساوي null\n
\n\n

هذه الطريقة مناسبة إذا كنت تخطط لملء المصفوفة لاحقًا (مثلًا في حلقة). من المهم التذكر: للأنواع الرقمية، القيم الافتراضية هي 0، لـ boolean — false، للأنواع المرجعية — null.

\n\n

الطريقة 2: التهيئة باستخدام حرفية المصفوفة

\n
int[] numbers = {1, 2, 3, 4, 5};\nString[] fruits = {"apple", "banana", "orange"};\n
\n\n

هذه هي الطريقة الأقصر والأكثر ملاءمة عندما تعرف جميع العناصر مسبقًا. لاحظ: هذا البناء يعمل فقط عند التصريح.

\n\n

الطريقة 3: مصفوفة مجهولة (بدون اسم متغير)

\n
int[] numbers = new int[]{1, 2, 3, 4, 5};\n
\n\n

هذا الخيار مفيد عندما تحتاج إلى تمرير مصفوفة إلى دالة دون إنشاء متغير منفصل:

\n\n
printArray(new int[]{10, 20, 30});\n
\n\n

الطريقة 4: التهيئة عبر حلقة

\n
int[] squares = new int[10];\nfor (int i = 0; i < squares.length; i++) {\n    squares[i] = (i + 1) * (i + 1);\n}\n
\n\n

مثالية للتعبئة الديناميكية، مثل حساب القيم أو قراءة البيانات من ملف.

\n\n

4

المدونات

توصيات الكتب