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; }. در Tin.java هیچ main نیست. قبل از کامپایل ذخیره کنید.
انتساب را یکبار دیگر بخوانید. سمت راست size مقداری است که به پارامتر رسیده — اینجا 7. سمت چپ this.size فیلد روی شیء در حال ساخت است. بعد از اجرا، size همان شیء 7 میگیرد. اگر this. را بردارید و size = size; بماند، بعداً صفحه 0 نشان میدهد چون فیلد عوض نشده است.
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 را اجرا نکنید — بعد از کامپایل Tin.java و Lab.java فرمان java Lab را بزنید.
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 نشان میدهد.
اگر بهجای this.size = size; بنویسید size = size;، فیلد برای int روی 0 میماند. آن وقت صفحه 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 را چاپ کنید. ارجاع شیء بهتنهایی مقدار فیلد نیست.
در روزهای دیگر هنوز میتوانید نام پارامتر متفاوتی انتخاب کنید. این درس عمداً نامهای یکسان را برمیگزیند. روی این صفحه در یک دموی Tin، n و this را قاطی نکنید. یک مسیر روشن کافی است: نامهای جور، this روی فیلد، چاپ فیلد.
دو tin همچنان جدا میمانند
هر new Tin(...) سازنده را دوباره برای یک شیء جدا اجرا میکند. میتوانید بنویسید Tin a = new Tin(2); و Tin b = new Tin(9);، بعد هر دو فیلد size را چاپ کنید. هر فراخوانی this.size = size; را روی شیء خودش بهکار میبرد. دو شیء یک شکاف size مشترک ندارند. برای آن چک به جعبهٔ کد دوم نیاز ندارید — وقتی 7 را دیدید یکبار عددها را در Lab عوض کنید، یا دموی تکtin را همان فایلی نگه دارید که ذخیره میکنید.
اگر هر دو خط 0 نشان دادند، سازنده هنوز سمت چپ this ندارد. اگر هنگام کامپایل Lab.java، javac کلاس Tin را پیدا نکرد، چک کنید 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); را نگه دارید. کامپایلر وقتی درس Tin است خودش Box نمیسازد.
وقتی پوشه هنوز Box.java یا Hall.java دارد، یا دست نزنید یا فقط اگر فرمان کامپایل را گیج میکنند پاکشان کنید. بعد از کامپایل جفت Tin و Lab این درس، java Lab را اجرا کنید.
قبل از متدهای نمونه
میتوانید int size; را اعلام کنید، Tin(int size) { this.size = size; } بنویسید، و از Lab با Tin t = new Tin(7); بسازید. هر دو فایل را کامپایل کنید و java Lab را اجرا کنید. صفحه 7 نشان میدهد. واژهٔ this فیلد شیء را نام میبرد وقتی پارامتر همان نام را دارد. عدد را در زمان ساخت دادید، سازنده با this ذخیره کرد، و چاپ ذخیره را ثابت کرد. صفحهٔ بعدی متدهای نمونه است، جایی که متدهای روی شیء بعد از ساختهشدن شیء از فیلدها استفاده میکنند.
سربرگ سازنده را بدون void نگه دارید. this. را روی فیلد نگه دارید. چاپ را روی t.size نگه دارید. این سه عادت نقطهٔ کنترل این صفحه است قبل از رفتن جلو.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود