بسته در Java
کلاس Bell را در پوشهای به نام kit بگذارید با خط اول package kit; و متد static به نام ring() که ding چاپ میکند. در Lobby.java کنار آن پوشه — نه داخل kit — از main صدا بزنید kit.Bell.ring();. از پوشهٔ والد کامپایل کنید و java Lobby را اجرا کنید. صفحه باید یک خط نشان دهد: ding. نام بسته و نام پوشه جورند. صدا زدن با kit.Bell جلو کار این صفحه است. واژهٔ import را برای صفحهٔ بعد بگذارید.
نام پوشهای که فایل اعلام میکند
تا اینجا هر کلاس در یک پوشهٔ تخت مینشست. بسته کلاسها را زیر یک نام پوشه گروه میکند. خط اول فایل باید همان نام را بگوید: package kit;. فایل Bell.java باید داخل پوشهای به نام kit باشد. اگر پوشه و خط package جور نباشند، javac شکایت میکند.
اول پوشهٔ kit را بسازید. داخلش Bell.java را بسازید. خط اول package kit; است. بعد خط public class برابر public class Bell است. نام کلاس قدیمی Gate یا Tag را اینجا نگه ندارید. یک متد static بنویسید:
public static void ring() { System.out.println("ding"); }
روی متد public بگذارید تا کلاسی بیرون بسته بتواند صدا بزند. در Bell.java هیچ main نیست. قبل از کامپایل ذخیره کنید.
package kit;
public class Bell {
public static void ring() {
System.out.println("ding");
}
}
Lobby صدا میزند kit.Bell.ring
Lobby.java را در پوشهٔ والد بسازید — همسطح پوشهٔ kit، نه داخل kit. خط public class آن public class Lobby است. داخل main بنویسید kit.Bell.ring();. روی این صفحه import kit.Bell; ننویسید. نام کامل kit.Bell برای فراخوانی کافی است.
Lobby را کلاسی نگه دارید که main دارد. برای این درس main را داخل Bell نگذارید. اگر فایل ماندهٔ Pier از صفحهٔ access هنوز نزدیک است، برای این درس java Pier را اجرا نکنید — بعد از کامپایل از پوشهٔ والد، java Lobby را بزنید.
public class Lobby {
public static void main(String[] args) {
kit.Bell.ring();
}
}
از پوشهٔ والدی که هم Lobby.java دارد هم پوشهٔ kit، فرمان javac kit/Bell.java Lobby.java را اجرا کنید. در Windows همان ایده با kit\Bell.java هم هست — javac را به فایل داخل پوشهٔ بسته بزنید، بعد به Lobby.java. وقتی پرانتز و آکولاد و نقطهویرگولها جور باشند، javac خودش خطی نمینویسد. بعد java Lobby را اجرا کنید — نه java Lobby.java، و نه java kit.Bell. پسوند .java را از فرمان اجرا بردارید. کلاسی را شروع کنید که main دارد. همین فرمانها در Windows و macOS کار میکند وقتی مسیر با شل شما جور باشد.
برنامه باید یک خط چاپ کند و بایستد: ding. منتظر تایپ شما نمیماند. اگر ترمینال منتظر ورودی صفحهکلید ماند، هنوز صدای nextLine از تمرین قدیمی در فایلی مانده است. آن را پاک کنید و kit.Bell.ring(); را در Lobby نگه دارید، با package kit; در Bell.
اجرا را یکبار ببینید. Java از Lobby.main شروع میکند. فراخوانی kit.Bell.ring() کلاس Bell را در بستهٔ kit پیدا میکند و متد static را اجرا میکند. بدنه ding چاپ میکند. صفحه ding نشان میدهد. چیز دیگری نباید چاپ شود. اگر 9 یا ok دیدید، هنوز برنامهٔ قدیمی Pier یا Yard را اجرا میکنید.
اگر Bell.java کنار Lobby.java بدون پوشهٔ kit باشد در حالی که فایل هنوز میگوید package kit;، javac رد میکند. فایل را داخل kit ببرید. اگر از بیرون بسته Bell.ring(); را بدون kit. صدا بزنید، روی این صفحه javac نام کوتاه را نمیبیند — kit.Bell.ring(); را نگه دارید. نام بسته تا صفحهٔ بعد که import میآموزد بخشی از نام کامل نوع است.
پوشه و خط package کنار هم
یک جدول کوتاه جور بودن را روشن نگه میدارد.
📊 folder vs package line
| قطعه | روی این صفحه |
|---|---|
| نام پوشه | kit |
| خط اول در Bell.java | package kit; |
| فراخوانی از Lobby | kit.Bell.ring(); |
| import | روی این صفحه نیست — درس بعد |
جدول فقط یادآوری است. قطعاتی که نگه میدارید package kit; در فایل Bell، مسیر فایل زیر kit، و kit.Bell.ring(); در Lobby است. |
مقایسه با access و با پوشهٔ تخت
روی صفحهٔ access، Gate و Pier یک پوشه را با فیلد private شریک بودند. آن هنوز کار میکند. این صفحه پوشهٔ بسته و خط package اضافه میکند. دموی ماندهٔ Gate g = new Gate(9); g.show(); درس دیگری است. برای این صفحه kit/Bell.java و Lobby.java و kit.Bell.ring(); را نگه دارید.
هنوز میتوانید برای دموهای خیلی کوچک از پوشهٔ تخت استفاده کنید. این درس بسته را انتخاب میکند تا نام را جلوی کلاس ببینید. روی این صفحه در یک دموی Lobby، g.show() و kit.Bell.ring() را قاطی نکنید. یک مسیر روشن کافی است: خط package، پوشهٔ جور، فراخوانی کامل از Lobby.
از والد کامپایل کنید، نه فقط از داخل kit
وقتی کامپایل میکنید و وقتی java Lobby را اجرا میکنید در پوشهٔ والد بمانید. اگر cd به داخل kit بروید و بدون درستکردن classpath بخواهید Lobby را از آنجا اجرا کنید، مسیر کوتاه درس میشکند. برای این صفحه پوشهٔ والد را پوشهٔ کار نگه دارید. بعد از کامپایل درست، فایل .class مربوط به Bell باید زیر kit کنار Bell.java ظاهر شود.
اگر صفحه 9 یا ok نشان داد، هنوز برنامهٔ قدیمی Pier یا Yard اجرا میشود. به java Lobby بروید. اگر javac کلاس kit.Bell را پیدا نکرد، املای نام پوشه و خط package kit; را حرفبهحرف چک کنید.
چه چیزی برای import میماند
این صفحه در هر فراخوانی نام کامل kit.Bell را تایپ میکند. صفحهٔ بعدی — import — نشان میدهد چطور import kit.Bell; اجازه میدهد در Lobby نام کوتاه Bell را بنویسید. اینجا با نام کامل بمانید. روی این صفحه import نسازید مگر از قبل بلد باشید؛ هدف درس پوشهٔ بسته و kit.Bell.ring(); است.
وقتی فایلهای قدیمی Gate.java یا Pier.java هنوز در پوشهٔ والد هستند، یا دست نزنید یا فقط اگر فرمان کامپایل را گیج میکنند پاکشان کنید. بعد از کامپایل جفت بستهٔ این درس، java Lobby را اجرا کنید.
قبل از import
میتوانید Bell.java را زیر پوشهٔ kit با package kit; و public static void ring() که ding چاپ میکند بگذارید، و از Lobby بدون import صدا بزنید kit.Bell.ring();. از پوشهٔ والد کامپایل کنید و java Lobby را اجرا کنید. صفحه ding نشان میدهد. نام بسته با پوشه جور بود. صفحهٔ بعدی import است، جایی که بعد از یک خط import نام کوتاه کافی میشود.
package kit; را خط اول Bell نگه دارید. فایل را داخل kit نگه دارید. فراخوانی را kit.Bell.ring(); نگه دارید. این سه عادت نقطهٔ کنترل این صفحه است قبل از رفتن جلو. وقتی از پوشهٔ والد صفحه ding نشان داد، چیدمان بسته کار این درس را انجام میدهد.
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود