در حال بارگذاری...

متدها در Java

متدی به نام ring بنویسید که یک کلمه چاپ کند: ding. آن خط‌های چاپ را زیر static void ring() با پرانتز خالی بگذارید. داخل main فقط بنویسید ring(); — نام، بعد پرانتز خالی، بعد نقطه‌ویرگول. کامپایل و اجرا کنید. صفحه باید یک خط نشان دهد: ding. خودِ main آن println مربوط به ding را نگه نمی‌دارد؛ متد نگه می‌دارد. همین جداسازی کار این صفحه است.

خط‌هایی که زیر ring زندگی می‌کنند

تا اینجا بیشتر کار چاپ مستقیم داخل main بود. آن روش هنوز درست است. متد به همان خط‌ها نام جدا می‌دهد. خط‌ها را یک‌بار زیر آن نام می‌نویسید. بعد main با نوشتن همان نام به‌صورت صدا زدن، آن‌ها را می‌خواهد.
یک برنامهٔ کوچک با نام Chime.java بسازید. public class روی خط اول باید با نام فایل یکی باشد: public class Chime. نام کلاس قدیمی Pack یا Skip را در این فایل نگه ندارید؛ کامپایلر انتظار دارد نام کلاس و نام فایل جور باشند.
بیرون از main، هنوز داخل آکولاد کلاس، بنویسید:
static void ring() {
System.out.println("ding");
}
کلمهٔ static روی شکل مبتدی این صفحه می‌ماند تا main بتواند ring را بدون ساختن شیء صدا بزند. کلمهٔ void یعنی این متد مقداری به صدازننده برنمی‌گرداند — فقط بدنه را اجرا می‌کند. نام ring همان برچسبی است که در main تایپ می‌کنید. پرانتز خالی () یعنی متد این صفحه مقداری داخل نمی‌گیرد. آکولاد بدنه را نگه می‌دارد. System.out.println("ding"); چهار حرف d-i-n-g را می‌نویسد. قبل از کامپایل فایل را ذخیره کنید.

Chime.java که کامپایل می‌کنید

این همان برنامهٔ کوچک کامل این صفحه است. main فقط صدا زدن را نگه می‌دارد. ring چاپ را نگه می‌دارد.

ring چاپ ding

java
public class Chime {
    public static void main(String[] args) {
        ring();
    }

    static void ring() {
        System.out.println("ding");
    }
}

در پوشه‌ای که Chime.java آنجاست بنویسید javac Chime.java. وقتی پرانتز و آکولاد و نقطه‌ویرگول‌ها جور باشند، javac خودش خطی نمی‌نویسد. بعد بنویسید java Chime — نه java Chime.java. پسوند .java را از فرمان دوم بردارید. همین دو فرمان در Windows و macOS یکی است؛ این صفحه املای پوستهٔ جدا برای هیچ‌کدام نمی‌خواهد. برنامه باید یک خط چاپ کند و تمام شود: ding. منتظر تایپ شما نمی‌ماند. اگر ترمینال منتظر ماند، هنوز nextLine از تمرین قدیمی داخل فایل است. آن را پاک کنید و ring(); داخل main به‌همراه متد ring بالا را نگه دارید. برای خط اشتباه روی صفحه لازم نیست JDK را دوباره نصب کنید.

یک اجرا را به ترتیب بخوانید. Java از main شروع می‌کند. تنها دستور داخل main همان ring(); است. آن صدا زدن وارد متد ring می‌شود. داخل ring، println کلمهٔ ding را می‌نویسد. بعد ring تمام می‌شود و در main چیزی نمانده، پس برنامه تمام می‌شود. روی این صفحه System.out.println("ding"); را داخل main نگذاشتید. زیر ring گذاشتید و با نام صدا زدید. اگر صفحه ding نشان دهد، صدا زدن به بدنه رسیده است. اگر بعد از کامپایل تمیز صفحه خالی بماند، یا main اصلاً ring را صدا نزده، یا هنوز فقط آکولاد خالی بدون صدا زدن داخل main است.

ring را از main بیش از یک‌بار صدا بزنید

فقط main را عوض کنید تا همان متد را دو بار صدا بزند:
public static void main(String[] args) {
ring();
ring();
}
خودِ متد ring را دست نزنید. دوباره کامپایل و اجرا کنید: javac Chime.java و بعد java Chime. صفحه باید دو خط نشان دهد، هر کدام ding. صدای اول بدنه را یک‌بار اجرا می‌کند. صدای دوم همان بدنه را دوباره اجرا می‌کند. همین استفادهٔ دوباره دلیل نام‌گذاری خط‌هاست. println را زیر ring دوباره کپی نکردید. داخل main یک صدای دوم نوشتید.
اگر ring(); دوم را بردارید و فقط یک صدا بماند، صفحه دوباره به یک ding برمی‌گردد. تعریف متد به‌تنهایی چیزی چاپ نمی‌کند. فقط صدا زدن از main (یا بعداً از متد دیگر) بدنه را اجرا می‌کند. فایلی که ring را تعریف کند ولی از main صدا نزند می‌تواند کامپایل شود و با این حال وقتی java Chime می‌زنید صفحه خالی بماند، چون main کاری ندارد.

تکه‌های سرِ متد

روی این صفحه سرِ متد این است: static void ring(). از چپ به راست بخوانید. static اجازه می‌دهد main روی شکل مبتدی این صفحه متد را صدا بزند. void یعنی از راه صدا زدن مقداری برنمی‌گردد. ring نام است. () عمداً خالی است: این جلسه کلمه یا عدد داخل متد نمی‌فرستد. صفحهٔ بعد، parameters، داخل همان پرانتز نام می‌گذارد. صفحهٔ بعدتر، return، وقتی به مقدار برگشتی نیاز دارید void را عوض می‌کند. هر دو را برای بعد نگه دارید. امروز پرانتز خالی و void کافی است.

📊 تکهٔ سر روی این صفحه

تکه روی این صفحه
static main می‌تواند ring را بدون شیء صدا بزند
void ring مقداری برنمی‌گرداند
ring نامی که در صدا زدن تایپ می‌کنید
() روی این صفحه مقداری داخل نمی‌رود
{ ... } بدنه‌ای که ding چاپ می‌کند

صدا زدن داخل main باید دقیقاً با نام یکی باشد: ring(); با r کوچک، پرانتز خالی، و نقطه‌ویرگول. نوشتن Ring(); با R بزرگ برای Java نام دیگری است. نوشتن ring بدون () روی این شکل صدا زدن نیست. نوشتن System.out.println("ring"); چهار حرف کلمهٔ ring را چاپ می‌کند؛ بدنهٔ متد را اجرا نمی‌کند. وقتی می‌خواهید ding روی صفحه باشد، صدا زدن را ring(); نگه دارید.

بازماندهٔ رایج دموی قدیمی Pack و for-each است که هنوز کنار صدای جدید داخل main نشسته. آن وقت صفحه ممکن است ۲ و ۴ و ۶، یا red و blue نشان دهد به‌جای ding — یا هر دو جور خط مخلوط. main را تا همان ring();هایی که این درس می‌خواهد خلوت کنید. اشتباه دیگر گذاشتن متد داخل آکولاد main است. متدهای این صفحه داخل کلاس، کنار main می‌نشینند، نه تو در توی main. javac متدی را که داخل main دفن شده باشد همان ring قابل صدا زدن حساب نمی‌کند. آکولاد ring را قبل از تمام شدن main ببندید، و آکولاد main را قبل از تمام شدن کلاس، تا هر بلوک فقط خط‌های خودش را داشته باشد.

برای صفحه‌های بعد آماده‌اید

می‌توانید static void ring() بنویسید، خط‌های println را داخل آکولادش بگذارید، و از main با ring() صدا بزنید تا صفحه ding نشان دهد. دو بار صدا زدن بدون کپی بدنه دو بار ding چاپ می‌کند. پرانتز خالی و void عمداً روی این صفحه می‌مانند. parameters مقدارها را داخل پرانتز می‌گذارد. return اجازه می‌دهد متد عدد یا متن را به main برگرداند. آن دو، دو صفحهٔ بعدی بعد از این‌اند.

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
7
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود