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

المفتاح this في Java

اكتب فئة Tin في Tin.java بحقل int اسمه size ومُنشئ Tin(int size) ينفّذ this.size = size;. في Lab.java ابنِ tin واحدًا بـ Tin t = new Tin(7);، ثم اطبع t.size. ترجم الملفين ونفّذ java Lab. يجب أن تظهر الشاشة سطرًا واحدًا: 7. المعامل والحقل يشتركان في الاسم size. كلمة this تسمي الحقل على الكائن حتى يصل التخزين إلى المكان الصحيح. استخدام this حين تتصادم الأسماء هو ما تعلّمه هذه الصفحة.

لماذا يحتاج الاسم نفسه إلى this

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

Tin with this in constructor

java
public class Tin {
    int size;

    Tin(int size) {
        this.size = size;
    }
}

Lab يبني tin واحدًا

أنشئ Lab.java في المجلد نفسه. سطر public class هو public class Lab. داخل main اكتب Tin t = new Tin(7); ثم System.out.println(t.size);. الوسيط 7 يصبح معامل المُنشئ size. المُنشئ يخزّنه بـ this.size = size;. لا تحتاج سطرًا منفصلًا t.size = 7; في هذه الصفحة.
أبقِ Lab الفئة التي تحمل main. لا تضع main داخل Tin لهذا الدرس. إذا بقي ملف Hall من صفحة المُنشئات في المجلد، لا تشغّل java Hall لهذا الدرس — نفّذ java Lab بعد ترجمة Tin.java وLab.java.

Lab builds one tin

java
public class Lab {
    public static void main(String[] args) {
        Tin t = new Tin(7);
        System.out.println(t.size);
    }
}

من المجلد الذي يحوي الملفين، نفّذ javac Tin.java Lab.java. يمكنك ترجمة Tin.java أولًا ثم Lab.java عندما يكتمل الاثنان. عندما تتطابق الأقواس والدعامات والفواصل المنقوطة، لا يكتب javac سطرًا من عنده. ثم نفّذ java Lab — لا java Lab.java، ولا java Tin. احذف نهاية .java من أمر التشغيل. ابدأ الفئة التي تحمل main. الأوامر نفسها تعمل على Windows وعلى macOS.
يجب أن يطبع البرنامج سطرًا واحدًا ويتوقف: 7. لا يطلب منك الكتابة. إذا انتظر الطرفية إدخال لوحة المفاتيح، فما زال استدعاء nextLine من تمرين أقدم في أحد الملفات. احذف ذلك الاستدعاء وأبقِ new Tin(7) مع الطباعة في Lab، ومع this.size = size; في Tin.
امشِ التشغيل مرة. تبدأ Java من Lab.main. العبارة new Tin(7) تبني Tin وتستدعي Tin(int size) مع المعامل يساوي 7. الجسم يكتب this.size = size، فيصبح حقل الكائن 7. ثم يطبع main قيمة t.size وتظهر الشاشة 7.
إذا كتبت size = size; بدل this.size = size;، يبقى الحقل على 0 لـ int. تظهر الشاشة عندها 0 لا 7. ذلك عادة علامة أن this ناقص. أعد this. على الجانب الأيسر من الإسناد.

this.size و size جنبًا إلى جنب

جدول قصير يبقي الاسمين واضحين وأنت داخل المُنشئ.

📊 this.size vs size

الاسم معناه داخل Tin(int size)
size وحدها المعامل الذي دخل المُنشئ
this.size الحقل على الكائن قيد البناء
this.size = size; خزّن المعامل في الحقل
size = size; لا يحدّث الحقل
الجدول تذكير فقط. السطر الذي تبقيه هو this.size = size; داخل المُنشئ، ثم Tin t = new Tin(7); وSystem.out.println(t.size); في Lab.

مقارنة مع صفحة المُنشئات

في صفحة المُنشئات، عملت Box(int n) { size = n; } لأن n وsize كلمتان مختلفتان. ذلك الشكل ما زال يعمل. هذه الصفحة تستخدم عمدًا الكلمة نفسها مرتين حتى تحتاج إلى this. عرض Box وHall المتبقي مع size = n; درس مختلف. لهذه الصفحة أبقِ Tin وLab وthis.size = size;.
طباعة t وحده بـ System.out.println(t); لا تُظهر 7 نظيفًا. اطبع t.size لترى الرقم المخزَّن. مرجع الكائن وحده ليس قيمة الحقل.
ما زال بإمكانك اختيار اسم معامل مختلف في أيام أخرى. هذا الدرس يختار الأسماء المتطابقة عمدًا. لا تخلط n وthis في عرض Tin نفسه على هذه الصفحة. مسار واحد واضح يكفي: أسماء متطابقة، this على الحقل، طباعة الحقل.

tinان ما زالا منفصلين

كل new Tin(...) يشغّل المُنشئ من جديد لكائن منفصل. يمكنك كتابة Tin a = new Tin(2); وTin b = new Tin(9);، ثم طباعة حقلي size كليهما. كل استدعاء يستخدم this.size = size; على كائنه. الكائنان لا يشتركان في فتحة size واحدة. لا تحتاج صندوق كود ثانيًا لهذا الفحص — غيّر الأرقام في Lab مرة بعد أن رأيت 7، أو أبقِ عرض الـ tin الواحد كالملف الذي تحفظه.
إذا أظهر السطران 0، فالمُنشئ ما زال بلا this على الجانب الأيسر. إذا لم يجد javac الفئة Tin أثناء ترجمة Lab.java، تحقق أن Tin.java في المجلد نفسه وأن سطر الفئة هو public class Tin.

ما يبقى لدوال المثيل

هذه الصفحة تستخدم this فقط داخل المُنشئ لتخزين حقل. صفحة لاحقة — دوال المثيل — تُظهر دوالًا تعمل على كائن ويمكنها قراءة الحقول أو تغييرها. ابقَ هنا مع التخزين في المُنشئ. لا تخترع دوالًا إضافية على Tin لهذا الدرس إلا إن كنت تعرفها مسبقًا؛ هدف الدرس this.size = size حين تتطابق الأسماء.
إذا بقي في Lab السطر Box b = new Box(4); من عرض المُنشئات ولم توجد في هذا المجلد فئة Box تنوي الإبقاء عليها، احذف ذلك السطر. أبقِ Tin t = new Tin(7); وSystem.out.println(t.size);. المترجم لن يخترع Box لك وأنت تعلّم Tin.
عندما ما زال المجلد يحوي Box.java أو Hall.java، اتركهما أو احذفهما فقط إن أربكا أمر الترجمة. نفّذ java Lab بعد ترجمة زوج Tin وLab لهذا الدرس.

قبل دوال المثيل

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

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

جاهز للبدء

اختبر معرفتك

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

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

📝 التعليمات

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