public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
در اینجا هیچ چیز پیچیده ای وجود ندارد: یک روش جاوا که وظیفه آن ایجاد یک رشته تبریک با نامی است که به آن ارسال می کنیم. مانند مثال - Hello world! My name is Bobby
بیایید با نگاه کردن به هر کلمه کلیدی در اعلان متد (از چپ به راست) ساخت یک متد را به درستی درک کنیم. اولین کلمه کلیدی ما این است public
و یک اصلاح کننده دسترسی را نشان می دهد:
اصلاح کننده های دسترسی
آنها محدوده دید مجاز را برای اعضای کلاس نشان می دهند، یعنی محدودیت مکان هایی که در آن یک متغیر یا روش مجاز به استفاده است. اصلاح کننده های دسترسی زیر در جاوا استفاده می شوند:-
عمومی : عمومی. متدها یا فیلدهای دارای این اصلاحکننده عمومی هستند و برای سایر کلاسها (یا بهتر بگوییم روشها و فیلدهای آنها) از بسته فعلی و از بستههای خارجی قابل مشاهده هستند. این گسترده ترین سطح دسترسی شناخته شده است.
-
محافظت شده : متدها یا متغیرهای دارای این اصلاحکننده را میتوان از هر جایی در کلاس یا بسته فعلی یا در کلاسهایی که این یکی را به ارث میبرند، و همچنین متدها یا فیلدها، حتی اگر در بستههای دیگر باشند، دسترسی داشت.
protected String constructHelloSentence(String name) {...}
-
اصلاح کننده پیش فرض اگر یک فیلد کلاس یا متد اصلاح کننده نداشته باشد، اصلاح کننده پیش فرض اعمال می شود. در این حالت، فیلدها یا متدها برای همه کلاسهای بسته فعلی قابل مشاهده هستند (مانند محافظت شده ، اما در هنگام ارث بری بدون قابلیت مشاهده).
String constructHelloSentence(String name) {...}
-
private : مخالف اصلاح کننده عمومی . متد یا متغیری با چنین اصلاحکنندهای فقط در کلاسی که در آن اعلان شده است موجود است.
private String constructHelloSentence(String name) {...}
String
(خط اول متد که خواص آن را توضیح می دهد).
ارزش برگشتی
مقدار برگشتی داده ای است (برخی از نتایج اجرای متد) که پس از فراخوانی به جای خود می آید. هر متد یک مقدار بازگشتی دارد. یا نه؟روشهای ارزش بازگشتی
این مقدار می تواند هر نوع داده ای باشد: یک متغیر از نوع ساده یا یک نوع مرجع. در این مثال، نشان میدهیم که متد باید یک شی از نوع را برگرداندString
، که همانطور که به یاد داریم، کلاسی است که یک رشته را توصیف میکند. نکته دوم در اینجا کلمه است return
. این یک رابطه مستقیم با مقدار بازگشتی دارد: مقدار پس از آن به محلی که متد فراخوانی شده است بازگردانده می شود و سپس خود متد return
بسته می شود. این کلمه معمولاً در خط آخر متد (به جز روش هایی با شاخه های مختلف مانند if, else..
.) آمده است. اگر کد را در خط بعدی بعد از return
:
private String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
return resultSentence;
System.out.println(resultSentence);
}
سپس از کامپایلر نفرین می گیریم که خیلی خوب نیست (کامپایلر مزخرفات را توصیه نمی کند). همچنین باید به خاطر داشته باشید که نوع داده بعد с
باید با آنچه در امضای متد اعلام شده است مطابقت داشته باشد. در مورد اینجا بیشتر return
بخوانید .
خالی
در جاوا چه کاربردی داردvoid
؟ همه متدها مقدار برگشتی ندارند. برخی یا چیزی ندارند یا نیازی به برگرداندن چیزی ندارند. آن وقت چه باید کرد؟ سپس در امضای متد می نویسیم void
. روش ما بدون مقدار بازگشتی چگونه خواهد بود؟
protected void constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
}
احتمالاً متوجه شده اید که همراه با مقدار بازگشتی، کلمه return
So it is ناپدید شده است، زیرا متد ما نباید چیزی را برگرداند. با این حال، می توان آن را در اینجا قرار داد، اما بدون هیچ معنایی، فقط return
; در خط آخر این به طور کلی بی فایده است، بنابراین void
در روش های با اختیاری است. با این حال، میتواند در void
روشهایی مانند شاخهها یا حلقهها که میخواهید فوراً از متد خارج شوید، به طور مفید استفاده شود. بعد در اعلان متد که داشتیم constructHelloSentence
.
نام روش ها
constructHelloSentence
- نام روش، یک ویژگی متمایز که با آن می توانیم یک یا روش دیگر را تشخیص دهیم. و بر این اساس، یک یا روش دیگری را فراخوانی کنید. نام روش ها باید با یک حرف کوچک شروع شود، اما از casel case نیز استفاده شود (CamelCase, camel case): i.e. هر کلمه بعدی در نام مجاور کلمه قبلی است و با حرف بزرگ نوشته می شود. نام روش باید روش را توصیف کند (بهترین نظر نامگذاری مناسب است). برای این کار از افعال یا ترکیب با افعال استفاده کنید: getCat
, delete
, createCar
و غیره. در یک کلاس، نام متدها باید منحصر به فرد باشد (بدون احتساب بارگذاری بیش از حد روش، که کمی بعد در مورد آن صحبت خواهیم کرد). بیایید بیشتر به روشی که در حال تجزیه و تحلیل هستیم نگاه کنیم و ببینیم ( String name
)
پارامترهای روش
روشها ممکن است دادههای خاصی داشته باشند (یا نداشته باشند) که از خارج به دست میآیند، یعنی از جایی که متد فراخوانی شده است. در مورد ما، می بینیم که یک شی تایپString
با نام وارد می شود name
و بعداً از این متغیر در متد خود استفاده می کنیم. شما می توانید از تعداد نامحدودی از پارامترها در یک متد استفاده کنید، اما بیش از 7 پارامتر توصیه نمی شود. هنگامی که تعداد دقیق عناصر را نمی دانیم، اما همه این عناصر برای یک هدف مورد نیاز هستند و از یک نوع خواهند بود (به عنوان مثال، String
)، از بیضی استفاده می شود:
public void constructHelloSentence(String...name) {
...
}
جذابیت هر عنصر به این صورت خواهد بود: name[0]
آیا شما را به یاد چیزی می اندازد؟ درست است، آرایه! اگر بنویسیم هیچ چیز تغییر نمی کند:
protected void constructHelloSentence(String[] name) {
...
}
دسترسی به عناصر نیز به این شکل خواهد بود: name[1]
و یک چیز دیگر. آرگومان های روش می توانند نهایی باشند :
public String constructHelloSentence(final String name) {
...
}
این بدان معنی است که نام مرجع به یک شی خاص محدود شده است String
و نمی توان آن را لغو کرد. final
می توانید در مورد کار با متغیرهای مرجع و تعامل آنها با کلمات رزرو شده در مطالب " Reference Types در جاوا " مطالعه کنید.
روش های فراخوانی
بنابراین، ما ایجاد روش ها را مرتب کرده ایم، اکنون بیایید در مورد استفاده از آنها صحبت کنیم. چگونه یک متد را در جاوا فراخوانی کنیم؟ هر متد در جاوا در یک کلاس قرار دارد. برای درک نحوه عملکرد متدهای فراخوانی در جاوا، بیایید کلاسی را انتخاب کنیم:public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
}
از آنجایی که متد ما ثابت نیست (این یک موضوع جداگانه برای بحث است که فراتر از محدوده مقاله امروزی است)، برای فراخوانی آن ابتدا باید یک شی ایجاد کنید و سپس متد را روی آن فراخوانی کنید:
class Application{
public static void main(String[] args) {
StringConstructor stringConstructor = new StringConstructor();
stringConstructor.constructHelloSentence("Den");
}
}
در آرگومانهای متد خود، رشته (نام) را که میخواهیم در رشتهای که روی صفحه نمایش داده میشود مشاهده کنیم، ارسال کردیم:
Hello world! My name is Den
همچنین لازم به یادآوری است که روش ها می توانند هر چند بار که نیاز داریم دوباره استفاده شوند - هیچ محدودیتی وجود ندارد.
این
شما اغلب می توانید کلمه کلیدی را در کد مشاهده کنیدthis
، مانند تنظیم کننده ها:
public void setValue(Long value) {
this.value = value;
}
و این چه معنایی داره؟ this
در جاوا، این اشاره به شی فعلی این کلاس است. به عنوان مثال، اگر یک شی ایجاد کنیم:
StringConstructor stringConstructor = new StringConstructor();
سپس this
در داخل شی stringConstructor
پیوندی به همان شی وجود خواهد داشت. this
هم برای ارجاع به یک متغیر شی (مانند تنظیم کننده بالا) و هم برای فراخوانی یک متد استفاده می شود. ما می توانیم کلاس خود را کمی بازنویسی کنیم:
public class StringConstructor {
public String constructHelloSentence(String name) {
String resultSentence = this.getSentence() + name;
System.out.println(resultSentence);
return resultSentence;
}
private String getSentence() {
return "Hello world! My name is ";
}
}
از طریق this
متد این شیء را فراخوانی می کنیم تا رشته مورد نیاز را بگیرد. اما هنوز، به عنوان یک قاعده، این تقریباً برای روش ها استفاده نمی شود، زیرا حتی بدون آن نیز اشاره ای به روش یک شی داده شده وجود دارد؛ این عمدتا برای یک متغیر شی استفاده می شود.
روش اضافه بار
فرض کنید به روشی نیاز داشتیم که اساساً همان منطق را انجام دهد، اما در یکHello world
! در عوض world
می خواهیم کلمه خودمان (رشته) را وارد کنیم. اما ما قبلاً یک روش داریم constructHelloSentence
. بنابراین، آیا باید برای روشی که اساساً همان عملکرد را انجام می دهد، نام جدیدی پیدا کنیم؟ مهم نیست که چگونه است: در این لحظه روش اضافه بار به کمک ما می آید. اضافه بار متد استفاده از نام یک متد بیش از یک بار هنگام اعلام آن در یک کلاس است. از نظر نحو زبان، نمی توان دو نام یکسان در فضای محلی وجود داشت. اما می توان متدهایی را با نام های مشابه اما آرگومان های متفاوت نیز اعلام کرد. به عبارت دیگر، زمانی که دو یا چند متد با نامهای مشابه اما دادههای ورودی متفاوت وجود داشته باشد، یک کلاس حاوی اضافه بار است:
public class Constructor {
public String constructHelloSentence(String name) {
String resultSentence = "Hello world! My name is " + name;
System.out.println(resultSentence);
return resultSentence;
}
protected String constructHelloSentence(String firstName, String secondName) {
String resultSentence = "Hello " + firstName + "! My name is " + secondName;
System.out.println(resultSentence);
return resultSentence;
}
}
در اینجا می بینیم که متدها نباید دارای یک اصلاح کننده دسترسی (و همچنین نوع بازگشت) باشند. اگر یک متد اضافه بار فراخوانی شود، سپس از چندین روش اعلام شده، کامپایلر به طور خودکار روش مورد نیاز را بر اساس پارامترهایی که در طول فراخوانی مشخص شده اند، تعیین می کند.
GO TO FULL VERSION