JavaRush /وبلاگ جاوا /Random-FA /متدها در جاوا
articles
مرحله

متدها در جاوا

در گروه منتشر شد
متدها در جاوا - 1در جاوا، یک برنامه از کلاس ها تشکیل شده است. کلاس ها نیز به نوبه خود از متغیرهایی تشکیل شده اند. آنها مسئول ذخیره داده ها و متدهایی هستند که مسئول رفتار کلاس هستند: به عبارت دیگر منطقی که می تواند ارائه دهد (مثلاً پردازش برخی داده ها، فراخوانی روش های دیگر و غیره). ما می توانیم در مورد چنین مولفه هایی به عنوان متغیر برای مدت طولانی صحبت کنیم، اما به این دلیل نیست که امروز جمع شده ایم. بهتر است در مورد چنین مولفه ای از کلاس به عنوان متد صحبت کنیم. متدها در جاوا - 2یک متد یک بلوک نام‌گذاری شده از کد است که در یک کلاس اعلام شده است. این شامل یک توالی کامل از اقدامات (دستورالعمل) با هدف حل یک مشکل جداگانه است که می تواند مجددا استفاده شود. به عبارت دیگر، یک متد یک تابع است: چیزی که کلاس شما می تواند انجام دهد. زبان های دیگر نیز عملکردهایی دارند. فقط در جاوا آنها عضو کلاس ها هستند و طبق اصطلاحات OOP، متد نامیده می شوند. اما قبل از ادامه، اجازه دهید به یک مثال کوچک نگاه کنیم:
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و یک اصلاح کننده دسترسی را نشان می دهد:

اصلاح کننده های دسترسی

آنها محدوده دید مجاز را برای اعضای کلاس نشان می دهند، یعنی محدودیت مکان هایی که در آن یک متغیر یا روش مجاز به استفاده است. متدها در جاوا - 3اصلاح کننده های دسترسی زیر در جاوا استفاده می شوند:
  • عمومی : عمومی. متدها یا فیلدهای دارای این اصلاح‌کننده عمومی هستند و برای سایر کلاس‌ها (یا بهتر بگوییم روش‌ها و فیلدهای آنها) از بسته فعلی و از بسته‌های خارجی قابل مشاهده هستند. این گسترده ترین سطح دسترسی شناخته شده است.

  • محافظت شده : متدها یا متغیرهای دارای این اصلاح‌کننده را می‌توان از هر جایی در کلاس یا بسته فعلی یا در کلاس‌هایی که این یکی را به ارث می‌برند، و همچنین متدها یا فیلدها، حتی اگر در بسته‌های دیگر باشند، دسترسی داشت.

    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);
}
احتمالاً متوجه شده اید که همراه با مقدار بازگشتی، کلمه returnSo it is ناپدید شده است، زیرا متد ما نباید چیزی را برگرداند. با این حال، می توان آن را در اینجا قرار داد، اما بدون هیچ معنایی، فقط return; در خط آخر این به طور کلی بی فایده است، بنابراین voidدر روش های با اختیاری است. با این حال، می‌تواند در voidروش‌هایی مانند شاخه‌ها یا حلقه‌ها که می‌خواهید فوراً از متد خارج شوید، به طور مفید استفاده شود. بعد در اعلان متد که داشتیم constructHelloSentence.

نام روش ها

constructHelloSentence - نام روش، یک ویژگی متمایز که با آن می توانیم یک یا روش دیگر را تشخیص دهیم. و بر این اساس، یک یا روش دیگری را فراخوانی کنید. متدها در جاوا - 4نام روش ها باید با یک حرف کوچک شروع شود، اما از 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 در جاوا " مطالعه کنید.

روش های فراخوانی

بنابراین، ما ایجاد روش ها را مرتب کرده ایم، اکنون بیایید در مورد استفاده از آنها صحبت کنیم. چگونه یک متد را در جاوا فراخوانی کنیم؟ متدها در جاوا - 5هر متد در جاوا در یک کلاس قرار دارد. برای درک نحوه عملکرد متدهای فراخوانی در جاوا، بیایید کلاسی را انتخاب کنیم:
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. بنابراین، آیا باید برای روشی که اساساً همان عملکرد را انجام می دهد، نام جدیدی پیدا کنیم؟ مهم نیست که چگونه است: در این لحظه روش اضافه بار به کمک ما می آید. متدها در جاوا - 7اضافه بار متد استفاده از نام یک متد بیش از یک بار هنگام اعلام آن در یک کلاس است. از نظر نحو زبان، نمی توان دو نام یکسان در فضای محلی وجود داشت. اما می توان متدهایی را با نام های مشابه اما آرگومان های متفاوت نیز اعلام کرد. به عبارت دیگر، زمانی که دو یا چند متد با نام‌های مشابه اما داده‌های ورودی متفاوت وجود داشته باشد، یک کلاس حاوی اضافه بار است:
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;
  }
}
در اینجا می بینیم که متدها نباید دارای یک اصلاح کننده دسترسی (و همچنین نوع بازگشت) باشند. اگر یک متد اضافه بار فراخوانی شود، سپس از چندین روش اعلام شده، کامپایلر به طور خودکار روش مورد نیاز را بر اساس پارامترهایی که در طول فراخوانی مشخص شده اند، تعیین می کند.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION