جاري التحميل...

المُنشئ في Java

اكتب فئة Box في Box.java بحقل int اسمه size ومُنشئ Box(int n) ينفّذ size = n;. في Hall.java ابنِ صندوقًا واحدًا بـ Box b = new Box(4);، ثم اطبع b.size. ترجم الملفين ونفّذ java Hall. يجب أن تظهر الشاشة سطرًا واحدًا: 4. الرقم الذي تمرّره إلى new يصل إلى المُنشئ، والمُنشئ يخزّنه على الكائن قبل أن يكمل main. وضع الحقل وقت البناء — داخل المُنشئ — هو ما تعلّمه هذه الصفحة.

دالة تعمل حين يبني new

المُنشئ يحمل نفس اسم الفئة. بلا نوع إرجاع void وبلا أي نوع إرجاع آخر. عندما يكتب main عبارة new Box(4)، تبني Java الكائن وتشغّل ذلك المُنشئ مع 4 كقيمة لـ n. بعد انتهاء المُنشئ، يحمل المتغير الكائن الجاهز. هذا كل عمل الصفحة: مرّر قيمة إلى new، دع المُنشئ يخزّنها في الحقل، ثم اطبع الحقل لترى أن التخزين نجح.
أنشئ Box.java أولًا. سطر public class هو public class Box. لا تُبقِ اسم فئة قديمًا Cup أو Chip هنا. داخل الأقواس المجعدة أعلن int size;. ثم اكتب المُنشئ: Box(int n) { size = n; }. استخدم اسم معامل يختلف عن size في هذه الصفحة حتى يكون الإسناد واضحًا بلا كلمة this. لا يوجد main في Box.java. احفظ قبل الترجمة.
سطر الحقل وحده لا يضع 4 داخل الكائن. جسم المُنشئ يفعل ذلك حين يستدعيه new. إذا تخطيت المُنشئ وأعلنت الحقل فقط، فلن يطابق لاحقًا new Box(4)، وسيشتكي javac من الاستدعاء. أبقِ القطعتين في Box.java: الحقل والمُنشئ الذي يكتب فيه.

Box with constructor

java
public class Box {
    int size;

    Box(int n) {
        size = n;
    }
}

Hall يمرّر 4 إلى new Box

أنشئ Hall.java في المجلد نفسه. سطر public class هو public class Hall. داخل main اكتب Box b = new Box(4); ثم System.out.println(b.size);. الوسيط 4 يدخل معامل المُنشئ n. لا تحتاج سطرًا منفصلًا b.size = 4; في هذه الصفحة — المُنشئ خزّن القيمة أصلًا. سطر الطباعة موجود حتى تثق بما فعله المُنشئ بلا تخمين.
أبقِ Hall الفئة التي تحمل main. لا تضع main داخل Box لهذا الدرس. شكل الملفين يطابق صفحات الكائنات والحقول السابقة: ملف يعرّف النوع، والآخر يبنيه ويستخدمه. إذا غيّرت اسم الملف وبقي سطر قديم public class Shelf، يرفض javac حتى تتطابق الأسماء من جديد.

Hall builds one box

java
public class Hall {
    public static void main(String[] args) {
        Box b = new Box(4);
        System.out.println(b.size);
    }
}

من المجلد الذي يحوي الملفين، نفّذ javac Box.java Hall.java. يمكنك ترجمة Box.java أولًا ثم Hall.java عندما يكتمل الاثنان. عندما تتطابق الأقواس والدعامات والفواصل المنقوطة، لا يكتب javac سطرًا من عنده. ثم نفّذ java Hall — لا java Hall.java، ولا java Box. احذف نهاية .java من أمر التشغيل. ابدأ الفئة التي تحمل main. الأوامر نفسها تعمل على Windows وعلى macOS.
يجب أن يطبع البرنامج سطرًا واحدًا ويتوقف: 4. لا يطلب منك الكتابة. إذا انتظر الطرفية إدخال لوحة المفاتيح، فما زال استدعاء nextLine من تمرين أقدم في أحد الملفات. احذف ذلك الاستدعاء وأبقِ new Box(4) مع الطباعة في Hall، والمُنشئ في Box. المؤشر المنتظر ليس مشكلة مُنشئ؛ إنه كود إدخال متبقٍ في المكان الخطأ.
امشِ التشغيل مرة. تبدأ Java من Hall.main. العبارة new Box(4) تبني Box وتستدعي Box(int n) مع n يساوي 4. الجسم يكتب size = n، فيصبح size لذلك الكائن 4. ثم يطبع main قيمة b.size وتظهر الشاشة 4. لا يجب أن يطبع شيء آخر. إذا رأيت ok أو 3 أو بقايا Cup، فأنت لا تشغّل برنامج Hall لهذه الصفحة.
إذا كتبت new Box() بلا وسيط بينما المُنشئ الوحيد يحتاج int، يرفض javac. طابق الاستدعاء مع قائمة معاملات المُنشئ. إذا أضفت void قبل اسم المُنشئ، يصبح دالة عادية لا مُنشئًا، ولن يشغّل new Box(4) ذلك الجسم كما تتوقع هذه الصفحة. يجب أن يبدو الرأس مثل Box(int n)، لا void Box(int n)، ولا static int Box(int n).

مقارنة مع الإسناد بعد new

في صفحة الحقول كتبت c.fill = 3; بعد new Cup(). ذلك ما زال يعمل. هذه الصفحة تنقل التخزين إلى داخل المُنشئ حتى تُضبط القيمة أثناء بناء الكائن. عرض Cup متبقٍ مع c.fill = 3; درس مختلف. لهذه الصفحة أبقِ Box وHall وnew Box(4). إذا بقي في Hall السطر c.fill = 3; ولم توجد فئة Cup في هذا المجلد، احذف ذلك السطر. المترجم لن يخترع Cup لك.
طباعة b وحده بـ System.out.println(b); لا تُظهر 4 نظيفًا. اطبع b.size لترى الرقم المخزَّن. مرجع الكائن وحده ليس قيمة الحقل. تعلّمت هذا النمط في صفحة الحقول؛ أبقه هنا حين تتحقق من عمل المُنشئ.
ما زال بإمكانك إسناد حقل بعد new في برامج أخرى. هذا الدرس يختار مسار المُنشئ فقط حتى تصل أول قيمة مفيدة وقت البناء. لا تخلط الأسلوبين في عرض Hall نفسه على هذه الصفحة. مسار واحد واضح يكفي: وسيط إلى new، تخزين في المُنشئ، طباعة الحقل.

صندوقان، وحجمان

كل new Box(...) يشغّل المُنشئ من جديد لكائن منفصل. يمكنك كتابة Box a = new Box(2); وBox b = new Box(9);، ثم طباعة حقلي size كليهما. الاستدعاء الأول يخزّن 2 على كائن. الثاني يخزّن 9 على كائن آخر. الكائنان لا يشتركان في فتحة size واحدة.

Hall builds two boxes

java
public class Hall {
    public static void main(String[] args) {
        Box a = new Box(2);
        Box b = new Box(9);
        System.out.println(a.size);
        System.out.println(b.size);
    }
}

ترجم ونفّذ من جديد: javac Box.java Hall.java، ثم java Hall. يجب أن تظهر الشاشة 2 في سطر و9 في السطر التالي. كل استدعاء مُنشئ خزّن وسيطه على كائنه. كتابة Box b = a; لا تبني كائنًا ثانيًا — استخدم استدعاءَي new Box(...) حين تريد حجمين. نسخ المرجع ليس مثل استدعاء المُنشئ مرتين.
إذا أظهر السطران الرقم نفسه، تحقق أن كل new يمرّر وسيطًا مختلفًا وأنك تطبع a.size وb.size بهذا الترتيب. إذا توقف javac عند new الثاني، ابحث عن قوس ناقص أو اسم فئة خاطئ من ملف أقدم. أخطاء صغيرة في الاستدعاء الثاني شائعة حين تلصق السطر الأول وتنسى تغيير الوسيط.

ما يبقى لـ this

هذه الصفحة تستخدم size = n; بأسماء مختلفة. صفحة لاحقة — this — تُظهر كيف تتحدث عن حقل الكائن نفسه حين تتصادم الأسماء. ابقَ هنا مع اسم المعامل الواضح n. لا تخترع this.size في هذه الصفحة إلا إن كنت تعرفه مسبقًا؛ هدف الدرس استدعاء المُنشئ من new. كلمة this موضوع الصفحة التالية، وليست شرطًا لتخزين n في size اليوم.
إذا لم يجد javac الفئة Box أثناء ترجمة Hall.java، تحقق أن Box.java في المجلد نفسه وأن سطر الفئة هو public class Box. إذا أظهرت الشاشة 0، فقد يكون المُنشئ بلا إسناد، أو ما زال main يستخدم شكلًا بلا وسيط لا يضبط size أبدًا — أبقِ Box(int n) { size = n; } وnew Box(4). الصفر على الشاشة يعني عادة أن الحقل بقي على الافتراضي لأن التخزين لم يُنفَّذ.
حين يبقى المجلد يحمل Cup.java أو Shelf.java من صفحة الحقول، اتركهما أو احذفهما فقط إن شوّشا أمر الترجمة. لا تترجم Shelf قديمًا ما زال يسند c.fill وتتوقع شاشة هذه الصفحة. نفّذ java Hall بعد ترجمة زوج Box وHall لهذا الدرس.

قبل this

يمكنك إعلان int size;، وكتابة Box(int n) { size = n; }، والبناء بـ Box b = new Box(4); من Hall. ترجم الملفين ونفّذ java Hall. تظهر الشاشة 4. يعمل المُنشئ حين يبني new الكائن. مرّرت الرقم وقت البناء، خزّنه المُنشئ في الحقل، وأثبتت الطباعة التخزين. الصفحة التالية هي this، حيث تتعلّم طريقة أخرى لتسمية حقول الكائن نفسه داخل دواله ومُنشئاته.
أبقِ رأس المُنشئ بلا void. أبقِ الوسيط على new. أبقِ الطباعة على b.size. هذه العادات الثلاث نقطة التحقق لهذه الصفحة قبل الانتقال.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
5
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى