شیء در Java
کلاسی به نام Chip در Chip.java بنویسید با متد beep که ok چاپ کند. روی این صفحه متد static نیست. در فایل دوم Bench.java یک chip بسازید با Chip c = new Chip();، بعد صدا بزنید c.beep();. هر دو فایل را کامپایل کنید و java Bench را اجرا کنید. صفحه باید یک خط نشان دهد: ok. کلمهٔ new از کلاس یک شیء میسازد. متغیر c همان شیء را نگه میدارد. beep را روی c صدا میزنید، نه روی نام خالی کلاس. همین شیء ساختهشده — و صدایی که از آن استفاده میکند — کار این صفحه است.
یک شیء از کلاس
کلاس هنوز همان نوع نامدار است. شیء یک مقدار ساختهشده از آن نوع است. خط new Chip() از Java میخواهد آن مقدار را بسازد. آن را در متغیری از نوع Chip ذخیره میکنید، بعد با همان متغیر به متدهایی میرسید که مال هر شیء است.
اول Chip.java را بسازید. خط public class برابر public class Chip است. نام کلاس قدیمی Badge یا Desk را در این فایل نگه ندارید. داخل آکولاد بنویسید void beep() — روی این سرآیند کلمهٔ static نباشد. بدنه یک چاپ است: System.out.println("ok");. void را نگه دارید. متد عددی برنمیگرداند. در Chip.java روی این صفحه main نیست. قبل از کامپایل فایل را ذخیره کنید.
public class Chip {
void beep() {
System.out.println("ok");
}
}
Bench تراشه را میسازد، بعد beep را صدا میزند
در همان پوشه Bench.java بسازید. خط public class آن public class Bench است. داخل main دو خط بنویسید: اول Chip c = new Chip();، بعد c.beep();. خط اول متغیر c از نوع Chip را اعلام میکند و با یک شیء تازه پر میکند. خط دوم beep را روی همان شیء صدا میزند. نقطه بعد از نام متغیر میآید، نه بعد از نام کلاس بهتنهایی.
public class Bench {
public static void main(String[] args) {
Chip c = new Chip();
c.beep();
}
}
از پوشهای که هر دو فایل آنجاست، javac Chip.java Bench.java را اجرا کنید. میتوانید وقتی هر دو فایل کاملاند اول Chip.java و بعد Bench.java را کامپایل کنید. وقتی پرانتز و آکولاد و نقطهویرگولها جور باشند، javac خودش خطی نمینویسد. بعد java Bench را اجرا کنید — نه java Bench.java، و نه java Chip. پسوند .java را از فرمان اجرا بردارید. کلاسی را شروع کنید که main دارد. همین فرمانها در Windows و macOS کار میکند.
برنامه باید یک خط چاپ کند و بایستد: ok. منتظر تایپ شما نمیماند. اگر ترمینال منتظر ورودی صفحهکلید ماند، هنوز صدای nextLine از تمرین قدیمی در فایلی مانده است. آن را پاک کنید و در Bench همان Chip c = new Chip(); بههمراه c.beep(); را نگه دارید، با beep در Chip.
اجرا را یکبار ببینید. Java از Bench.main شروع میکند. عبارت new Chip() یک شیء میسازد. آن شیء در c ذخیره میشود. صدای c.beep() وارد beep برای همان شیء میشود. متد ok را چاپ میکند و برمیگردد. بعد Bench تمام میشود. خط صفحه از متد شیء آمد، بعد از اینکه new شیء را ساخت.
کلاس را مثل نقشه روی دیسک و شیء را مثل یک قطعهٔ ساختهشده در حافظه برای این اجرا ببینید. نقشه را یکبار کامپایل میکنید. هر new Chip() یک قطعهٔ دیگر میسازد. متغیر آن قطعه را نام میگذارد تا خطهای بعدی به آن برسند. بدون آن نام، روی این صفحه دستگیرهای برای beep نمیماند.
چرا صدا از c است، نه از Chip تنها
روی صفحهٔ کلاسها، متد static را میشد با نام نوع مثل Badge.show() صدا زد. اینجا beep کلمهٔ static ندارد. Java اول یک شیء میخواهد. نوشتن Chip.beep(); بدون شیء با این شکل مبتدی جور نیست. با new بسازید، نتیجه را در متغیر نگه دارید، بعد از راه همان متغیر صدا بزنید.
اگر فقط new Chip(); بنویسید و هرگز ذخیره نکنید، هنوز شیء ساختهاید، اما نامی برای صدای beep ندارید. روی این صفحه متغیر را نگه دارید: Chip c = new Chip(); بعد c.beep();. متغیر راه رسیدن به شیء بعد از تمام شدن new است.
نمونهٔ static باقیمانده میتواند پوشه را شلوغ کند. فایلی که هنوز Badge.show(); صدا میزند شکل درس قبل است. برای این صفحه Chip و Bench و خط new را نگه دارید. اینجا به Badge نیاز ندارید.
دو شیء، دو beep
میتوانید از همان کلاس بیش از یک شیء بسازید. هر new Chip() یک شیء جدا میسازد. هر شیء میتواند خودش beep را اجرا کند. متن کلاس مشترک است؛ شیءها یک مقدار نیستند.
public class Bench {
public static void main(String[] args) {
Chip a = new Chip();
Chip b = new Chip();
a.beep();
b.beep();
}
}
دوباره کامپایل و اجرا کنید: javac Chip.java Bench.java، بعد java Bench. صفحه باید دو خط نشان دهد: ok، بعد ok. خط اول از a آمد. خط دوم از b. هر دو از همان متن متد beep در Chip استفاده کردند، اما هر صدا روی شیء متفاوتی که با new ساخته شده بود اجرا شد.
اگر صفحه فقط یک ok نشان داد، چک کنید هر دو صدا حاضر باشند و هر دو متغیر با new ساخته شده باشند. نوشتن Chip b = a; شیء دوم نمیسازد؛ فقط b را به همان شیء a وصل میکند. آن ایده برای صفحات بعد میماند. روی این صفحه وقتی دو شیء میخواهید دو عبارت new Chip() بنویسید.
این صفحه برای fields چه میگذارد
این صفحه هنوز عدد یا کلمهای داخل chip ذخیره نمیکند. فیلدها — نامهایی که داده را روی هر شیء نگه میدارند — صفحهٔ بعد است. اینجا شیء بعد از new وجود دارد و متد نمونهای beep فقط چاپ میکند. همین برای دیدن جداسازی کلاس بهعنوان نوع و یک شیء بهعنوان مقدار ساختهشده کافی است.
میتوانید نام متغیر را از c به unit عوض کنید: Chip unit = new Chip(); بعد unit.beep();. وقتی بدنهٔ متد هنوز همان کلمه را چاپ کند صفحه ok میماند. نام متغیر مال شماست؛ نام نوع Chip و عبارت new Chip() باید همچنان جور باشند.
اگر هنگام کامپایل Bench.java گفت نماد Chip پیدا نشد، چک کنید Chip.java در همان پوشه باشد و خط کلاس واقعاً public class Chip بگوید. اگر اجرا چیزی چاپ نکرد، تأیید کنید main هنوز بعد از خط new صدا بزند c.beep(); و beep هنوز println داشته باشد.
قبل از fields
میتوانید Chip را با void beep() بنویسید، با Chip c = new Chip(); یک شیء بسازید، و از Bench صدا بزنید c.beep();. هر دو فایل را کامپایل کنید و java Bench را اجرا کنید. صفحه ok نشان میدهد. یک new Chip() دوم شیء دیگری میسازد که خودش میتواند beep کند. صفحهٔ بعد fields است؛ آنجا هر شیء شروع میکند دادهٔ ذخیرهشدهٔ خودش را نگه دارد.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود