متد نمونه در Java
یک کلاس Jar در Jar.java بنویسید با فیلد int به نام fill، سازندهٔ Jar(int n) که fill = n; میگذارد، و متد نمونهٔ void bump() که fill = fill + 1; را اجرا میکند. در Desk.java یک jar بسازید با Jar j = new Jar(3);، صدا بزنید j.bump();، بعد j.fill را چاپ کنید. هر دو فایل را کامپایل کنید و java Desk را اجرا کنید. صفحه باید یک خط نشان دهد: 4. متد روی همان یک شیء اجرا میشود و فیلدش را عوض میکند. صدا زدن متد از راه متغیر شیء کار این صفحه است.
متدی که مال شیء است
روی صفحات متدهای قبلی نام را از main بدون شیء جلو صدا میزدید. اینجا متد روی کلاس نشسته، اما از راه متغیر jar به آن میرسید: j.bump(). آن فراخوانی از فیلدهای همان jar که j نام میگذارد استفاده میکند. jar دوم fill خودش را نگه میدارد.
اول Jar.java را بسازید. خط public class برابر public class Jar است. نام کلاس قدیمی Tin یا Box را اینجا نگه ندارید. داخل آکولاد int fill; را اعلام کنید. سازنده را بنویسید Jar(int n) { fill = n; } با نامهای متفاوت تا این صفحه به this نیاز نداشته باشد. بعد متد نمونه را بنویسید:
void bump() { fill = fill + 1; }
در Jar.java هیچ main نیست. قبل از کامپایل ذخیره کنید. سربرگ متد void میخواهد چون bump مقداری برای چاپ برنمیگرداند. سازنده هنوز void ندارد — این تفاوت را روشن نگه دارید.
public class Jar {
int fill;
Jar(int n) {
fill = n;
}
void bump() {
fill = fill + 1;
}
}
Desk یک jar میسازد و bump را صدا میزند
در همان پوشه Desk.java بسازید. خط public class آن public class Desk است. داخل main سه خط به ترتیب بنویسید: Jar j = new Jar(3);، بعد j.bump();، بعد System.out.println(j.fill);. سازنده 3 را ذخیره میکند. فراخوانی j.bump() یکی اضافه میکند. چاپ مقدار جدید را نشان میدهد.
Desk را کلاسی نگه دارید که main دارد. برای این درس main را داخل Jar نگذارید. اگر فایل ماندهٔ Lab از صفحهٔ this هنوز در پوشه است، برای این درس java Lab را اجرا نکنید — بعد از کامپایل Jar.java و Desk.java فرمان java Desk را بزنید.
public class Desk {
public static void main(String[] args) {
Jar j = new Jar(3);
j.bump();
System.out.println(j.fill);
}
}
از پوشهای که هر دو فایل آنجاست، javac Jar.java Desk.java را اجرا کنید. میتوانید وقتی هر دو کاملاند اول Jar.java و بعد Desk.java را کامپایل کنید. وقتی پرانتز و آکولاد و نقطهویرگولها جور باشند، javac خودش خطی نمینویسد. بعد java Desk را اجرا کنید — نه java Desk.java، و نه java Jar. پسوند .java را از فرمان اجرا بردارید. کلاسی را شروع کنید که main دارد. همین فرمانها در Windows و macOS کار میکند.
برنامه باید یک خط چاپ کند و بایستد: 4. منتظر تایپ شما نمیماند. اگر ترمینال منتظر ورودی صفحهکلید ماند، هنوز صدای nextLine از تمرین قدیمی در فایلی مانده است. آن را پاک کنید و new Jar(3)، j.bump() و چاپ را در Desk نگه دارید، با bump در Jar.
اجرا را یکبار ببینید. Java از Desk.main شروع میکند. عبارت new Jar(3) یک jar میسازد و 3 را در fill میگذارد. فراخوانی j.bump() وارد bump روی همان شیء میشود. بدنه fill = fill + 1 مینویسد، پس fill میشود 4. بعد main مقدار j.fill را چاپ میکند و صفحه 4 نشان میدهد.
اگر bump(); را بدون j. جلو بنویسید، در این شکل main، javac رد میکند. متد نمونه به شیء نیاز دارد. اگر Jar.bump(); را مثل فراخوانی static بنویسید، آن ایدهٔ درس بعدی است — نه این صفحه. j.bump(); را نگه دارید.
مقایسه با this و با انتساب مستقیم فیلد
روی صفحهٔ this فیلد را داخل سازنده با نامهای یکسان ذخیره میکردید. آن هنوز کار میکند. این صفحه متدی اضافه میکند که بعد از ساختهشدن شیء میتوانید صدا بزنید. دموی ماندهٔ Tin t = new Tin(7); با this.size = size; درس دیگری است. برای این صفحه Jar و Desk و j.bump(); را نگه دارید.
هنوز میتوانید در main بنویسید j.fill = j.fill + 1;. این درس آن تغییر را داخل bump میبرد تا شیء خودش عمل را حمل کند. چاپ خود j با System.out.println(j); یک 4 تمیز نشان نمیدهد. برای دیدن عدد ذخیرهشده j.fill را چاپ کنید.
دو bump روی یک jar
میتوانید قبل از چاپ دو بار j.bump(); را صدا بزنید. با new Jar(3) شروع کنید، یک bump تا 4، bump دوم تا 5، بعد چاپ. آن چک در یک دموی کوچک دوم Desk جا میشود.
public class Desk {
public static void main(String[] args) {
Jar j = new Jar(3);
j.bump();
j.bump();
System.out.println(j.fill);
}
}
دوباره کامپایل و اجرا کنید: javac Jar.java Desk.java، بعد java Desk. صفحه باید 5 نشان دهد. هر فراخوانی bump روی همان شیء اجرا شد و یکی دیگر اضافه کرد. نوشتن Jar k = j; شیء دوم نمیسازد — وقتی دو fill جدا میخواهید دو بار new Jar(...) بزنید. برای این صفحه دو bump روی یک jar کافی است تا ببینید متد دو بار اجرا شد.
اگر صفحه هنوز 3 نشان داد، شاید فراخوانیهای bump جا افتاده یا main هنوز قبل از صدا زدن چاپ میکند. اگر 7 یا عدد ماندهٔ دیگری دیدید، شاید دموی قدیمی Tin هنوز در فایل است. new Jar(3) و فراخوانیهای bump را نگه دارید.
چه چیزی برای static میماند
این صفحه متد را از راه شیء صدا میزند: j.bump(). صفحهٔ بعدی — static — متدها و فیلدهایی را نشان میدهد که مال خود نام کلاساند بدون شیء جلو. اینجا با فراخوانی نمونه بمانید. روی این صفحه static void bump() نسازید مگر از قبل بلد باشید؛ هدف درس فراخوانی روی شیء است.
اگر هنگام کامپایل Desk.java، javac کلاس Jar را پیدا نکرد، چک کنید Jar.java در همان پوشه است و خط کلاس public class Jar است. اگر صفحه 0 نشان داد، شاید سازنده ذخیره ندارد، یا bump هیچوقت اجرا نمیشود — Jar(int n) { fill = n; } و j.bump(); را قبل از چاپ نگه دارید.
وقتی پوشه هنوز Tin.java یا Lab.java از صفحهٔ this دارد، یا دست نزنید یا فقط اگر فرمان کامپایل را گیج میکنند پاکشان کنید. بعد از کامپایل جفت Jar و Desk این درس، java Desk را اجرا کنید.
قبل از static
میتوانید int fill; را اعلام کنید، Jar(int n) { fill = n; } و void bump() { fill = fill + 1; } بنویسید، و از Desk اجرا کنید Jar j = new Jar(3);، j.bump();، بعد چاپ j.fill. هر دو فایل را کامپایل کنید و java Desk را اجرا کنید. صفحه 4 نشان میدهد. متد نمونه روی آن شیء اجرا شد و فیلدش را عوض کرد. صفحهٔ بعدی static است، جایی که بعضی اعضا مال نام کلاساند بدون نیاز به متغیر شیء جلو.
void را روی متد نگه دارید، نه روی سازنده. شیء را قبل از فراخوانی نگه دارید: j.bump();. چاپ را روی j.fill نگه دارید. این سه عادت نقطهٔ کنترل این صفحه است قبل از رفتن جلو.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود