آشنایی با متد ها در جاوا

آشنایی با متد ها در جاوا
مرداد ۱۷, ۱۳۹۸ No Comments javascript زهرا ابراهیمی

یک متد جاوا مجموعه‌ای از بیان‌هایی است که با هم برای انجام عملیات گروه‌بندی می‌شوند. برای مثال، هنگامی‌که شما ()System.out.println را فراخوانی می‌کنید، سیستم به‌طور خاص دستورات متعددی را برای نمایش پیام در کنسول اجرا می‌کند.

حالا شما خواهید آموخت که چگونه متدهای خود را با یا بدون مقدار بازگشتی ایجاد کنید، یک متد با یا بدون پارامتر را فراخوانی کنید و  روش انتزاعی را در طراحی برنامه اعمال کنید.

ایجاد متد

با توجه به مثال زیر دستور زبان مربوط به یک روش توضیح داده می‌شود.

دستور زبان

public static int methodName(int a, int b) {

   // body

}

در اینجا

  • public static  اصلاح‌گر است
  • int   نوع بازگشت را نشان می‌دهد
  • methodName نام روش است
  • a, b  پارامترهای رسمی هستند
  • int a, int b  لیست پارامترها هستند

تعریف متد شامل یک تیتر و بدنه متد است. همان‌طور که در دستور زبان زیر نشان داده‌شده است

دستور زبان

modifier returnType nameOfMethod (Parameter List) {

   // method body

}

دستور زبانی که در بالا آمده است شامل:

  •  modifier این نوع دسترسی روش را تعریف می‌کند و استفاده از آن  اختیاری است.
  • returnType  روش ممکنی است یک مقدار را بازمی‌گرداند.
  •  nameOfMethod  نام روش است. اثر متد شامل نام متد و لیست پارامتر است.
  • Parameter List  لیست پارامترها، نوع، دسته و تعداد پارامترهای یک روش است. استفاده از آن اختیاری است، روش ممکن است شامل پارامترهای صفر باشد.
  •  method body بدنه روش متشکل از روش متداول بیان‌ها است.

مثال

در اینجا کد روش منبع تعریف‌شده بالا به نام ()min  است. این روش دو پارامتر num1 و num2 را دریافت می‌کند و حداکثر بین دو عدد را برمی‌گرداند.

/** the snippet returns the minimum between two numbers */

public static int minFunction(int n1, int n2) {

   int min;

   if (n1 > n2)

      min = n2;

   else

      min = n1;

   return min;

}

فراخوانی متد

  • برای استفاده از یک متد، باید آن را فراخوانی کرد. دو روش برای این کار وجود دارد یعنی یا متد یک مقدار را بازمی‌گرداند و یا بدون مقدار بازگشتی است.
  • روند فراخوانی متد ساده است. هنگامی‌که برنامه یک متدرا فراخوانی می‌کند، کنترل برنامه به فراخوانی متد منتقل می‌شود. این متد فراخوانی شده سپس در دو شرایط فراخوان کننده را کنترل می‌کند:
  • دستور بازگشت اجراشده باشد.
  • متد به پایان آکولاد نهایی برسد.

متدهای بازگرداننده تهی به عنوان یک فراخوانی از سوی بیان در نظر گرفته می‌شوند. اجازه بدهید با مثال این مطلب را توضیح دهیم

System.out.println(“This is tutorialspoint.com!”);

فرار بازگشتی متد را می‌توان از طریق مثال زیر درک کرد:

int result = sum(6, 9);

در ادامه مثالی برای نشان دادن نحوه تعریف یک متد و نحوه فراخوانی آن آورده شده است.

مثال

public class ExampleMinNumber {

   public static void main(String[] args) {

      int a = 11;

      int b = 6;

      int c = minFunction(a, b);

      System.out.println(“Minimum Value = ” + c);

   }

   /** returns the minimum of two numbers */

   public static int minFunction(int n1, int n2) {

      int min;

      if (n1 > n2)

         min = n2;

      else

         min = n1;

      return min;

   }

}

نتیجه به‌صورت زیر است.

خروجی

Minimum value = 6

کلمات کلیدی خالی

کلمه کلیدی خالی ما را قادر می‌سازد تا متدهایی را ایجاد کنیم که ارزش یکسانی را نشان نمی‌دهند. در اینجا، در مثال زیر، از متد void methodRankPoints استفاده می‌کنیم. این متد یک متدخالی است که هیچ ارزشی ندارد. تماس با یک متد خالی باید یک بیان داشته باشد یعنی methodRankPoints (255.7)؛ این یک بیان در جاوا است همان‌طور که در مثال زیر نشان داده‌شده است با یک سیمی کلون به پایان می‌رسد.

مثال

public class ExampleVoid {

   public static void main(String[] args) {

      methodRankPoints(255.7);

   }

   public static void methodRankPoints(double points) {

      if (points >= 202.5) {

         System.out.println(“Rank:A1”);

      }else if (points >= 122.4) {

         System.out.println(“Rank:A2”);

      }else {

         System.out.println(“Rank:A3”);

      }

   }

}

نتیجه به‌صورت زیر است.

خروجی

Rank:A1

 انتقال پارامترها بر اساس مقدار

درحالی‌که تحت فرایند فراخوانی کار می‌کند، آرگومان‌ها باید منتقل شوند. این‌ها باید به همان ترتیب پارامترها در متد مشخص‌شده وجود داشته باشند. پارامترها می‌توانند از طریق مقدار یا مرجع منتقل شوند.

انتقال پارامترها بر اساس مقدار به معنی فراخوانی یک متدبا یک پارامتر است. درواقع مقدار آرگومان به پارامتر منتقل می‌شود.

مثال

برنامه زیر یک مثال از انتقال پارامتر بر اساس مقدار را نشان می‌دهد. مقادیر آرگومان‌ها بعد از فراخوانی همان‌قدر باقی می‌ماند.

public class swappingExample {

   public static void main(String[] args) {

      int a = 30;

      int b = 45;

      System.out.println(“Before swapping, a = ” + a + ” and b = ” + b);

      // Invoke the swap method

      swapFunction(a, b);

      System.out.println(“\n**Now, Before and After swapping values will be same here**:”);

      System.out.println(“After swapping, a = ” + a + ” and b is ” + b);

   }

   public static void swapFunction(int a, int b) {

      System.out.println(“Before swapping(Inside), a = ” + a + ” b = ” + b);

      // Swap n1 with n2

      int c = a;

      a = b;

      b = c;

      System.out.println(“After swapping(Inside), a = ” + a + ” b = ” + b);

   }

}

نتیجه برنامه به‌صورت زیر خواهد شد

خروجی

Before swapping, a = 30 and b = 45

Before swapping(Inside), a = 30 b = 45

After swapping(Inside), a = 45 b = 30

**Now, Before and After swapping values will be same here**:

After swapping, a = 30 and b is 45

متدهای بارگذاری

هنگامی‌که یک کلاس دارای دو یا چند متد با همان نام و پارامترهای مختلف باشد، متد بارگذاری نامیده می‌شود. این متفاوت از باطل سازی است. در باطل سازی، یک متد هم نام، هم نوع، هم تعداد پارامترهای متد را دارد.

با ما همراه باشید تا مثالی در زمینه بحث، برای پیدا کردن عدد صحیح مینیمم را بررسی کنیم. بهتر است بگوییم ما می‌خواهیم حداقل عدد از نوع دابل را پیدا کنیم. سپس دو یا چند متد با همان نام، اما پارامترهای مختلف ایجاد می‌شود و مفهوم بارگذاری معرفی خواهد شد.

مثال زیر این مطلب را توضیح می‌دهد –

مثال

public class ExampleOverloading {

   public static void main(String[] args) {

      int a = 11;

      int b = 6;

      double c = 7.3;

      double d = 9.4;

      int result1 = minFunction(a, b);

      // same function name with different parameters

      double result2 = minFunction(c, d);

      System.out.println(“Minimum Value = ” + result1);

      System.out.println(“Minimum Value = ” + result2);

   }

   // for integer

   public static int minFunction(int n1, int n2) {

      int min;

      if (n1 > n2)

         min = n2;

      else

         min = n1;

      return min;

   }

   // for double

   public static double minFunction(double n1, double n2) {

     double min;

      if (n1 > n2)

         min = n2;

      else

         min = n1;

      return min;

   }

}

نتیجه به‌صورت زیر است

خروجی

Minimum Value = 6

Minimum Value = 7.3

روش‌های بارگذاری باعث می‌شود برنامه قابل‌خواندن باشد. در اینجا، دو روش با نام مشابه با پارامترهای مختلف داده می‌شود. حداقل عدد صحیح از نوع دابل نتیجه خروجی است.

با استفاده از خط فرمان آرگومان‌ها

گاهی اوقات شما می‌خواهید بعضی از اطلاعات را در یک برنامه زمانی که آن را اجرا می‌کنید منتقل کنید. این کار با انتقال آرگومان‌های خط فرمان به ()main  انجام می‌شود.

آرگومان خط فرمان، اطلاعاتی است که به‌طور مستقیم بعد از نام برنامه در خط فرمان اجرا می‌شود. دسترسی به آرگومان خط فرمان در داخل یک برنامه جاوا کاملاً آسان است. آن‌ها به‌صورت رشته‌ای در آرایه رشته‌ای به ()main  منتقل می‌شوند.

مثال

برنامه زیر نمایشی از تمام آرگومان‌های  خط فرمان است، شما نیز سعی کنید این برنامه را به‌صورت نشان داده‌شده اجرا کنید.

public class CommandLine {

   public static void main(String args[]) {

      for(int i = 0; i<args.length; i++) {

         System.out.println(“args[” + i + “]: ” +  args[i]);

      }

   }

}

سعی کنید اجرای این برنامه را به‌صورت نشان داده‌شده انجام دهید

$java CommandLine this is a command line 200 -100

نتیجه به‌صورت زیر خواهد بود

خروجی

args[0]: this

args[1]: is

args[2]: a

args[3]: command

args[4]: line

args[5]: 200

args[6]: -100

سازندگان

یک سازنده می‌تواند یک موضوع در حین ایجاد، مقداردهی اولیه کند. با کلاس هم نام است و دستور زبان مشابه با متد دارد. بااین‌حال، سازندگان هیچ نوع بازگشت صریح ندارند.

به‌طورمعمول، شما از یک سازنده برای دادن مقادیر اولیه به متغیرهای نمونه تعریف‌شده توسط کلاس استفاده می‌کنید و یا می‌توانید برای انجام هرگونه مراحل راه‌اندازی موردنیاز برای ایجاد یک موضوع که به‌طور کامل تشکیل‌شده استفاده کنید.

همه کلاس‌ها دارای سازنده هستند، چه شما آن‌ها را تعریف کنید یا نه! زیرا جاوا به‌طور خودکار یک سازنده پیش‌فرض را فراهم می‌کند که تمام متغیرها را صفر می‌کند. بااین‌حال، هنگامی‌که سازنده خود را تعریف می‌کنید، سازنده پیش‌فرض دیگر استفاده نمی‌شود.

مثال

در اینجا یک مثال ساده از یک سازنده بدون پارامتر آورده شده است.

// A simple constructor.

class MyClass {

   int x;

   // Following is the constructor

   MyClass() {

      x = 10;

   }

}

شما مستلزم به مقداردهی اولیه موضوع برای فراخوانی سازنده هستید که به شکل زیر انجام می‌شود.

public class ConsDemo {

   public static void main(String args[]) {

      MyClass t1 = new MyClass();

      MyClass t2 = new MyClass();

      System.out.println(t1.x + ” ” + t2.x);

   }

}

خروجی

۱۰ ۱۰

سازنده پارامتری

اغلب موارد، شما نیاز به یک سازنده که یک یا چند پارامتر را بپذیرد. پارامترها همان‌طور که به یک متد اضافه می‌شدند به یک سازنده اضافه می‌شوند، فقط آن‌ها پس از نام سازنده در داخل پرانتز اعلام می‌شوند.

مثال

در اینجا یک مثال ساده از یک سازنده یک پارامتری آورده شده است

// A simple constructor.

class MyClass {

   int x;

   // Following is the constructor

   MyClass(int i ) {

      x = i;

   }

}

شما باید برای مقداردهی اولیه یک سازنده، یک موضوع را فراخوانی کنید

public class ConsDemo {

   public static void main(String args[]) {

      MyClass t1 = new MyClass( 10 );

      MyClass t2 = new MyClass( 20 );

      System.out.println(t1.x + ” ” + t2.x);

   }

}

نتیجه به‌صورت زیر حاصل می‌گردد.

خروجی

۱۰ ۲۰

کلیدواژه this

this یک کلمه کلیدی در جاوا است که به عنوان یک مرجع به موضوع از کلاس فعلی، با یک متدنمونه یا سازنده استفاده می‌شود. با استفاده از این می‌توانید اعضای یک کلاس مانند سازنده‌ها، متغیرها و متدها ارجاع دهید.

توجه داشته باشید که کلمه کلیدی this تنها در متد نمونه یا سازنده مورداستفاده قرار می‌گیرد.

فراخوانی متد در جاوا

درمجموع کلمه کلیدی this در شرایط زیر استفاده می‌شود:

  • در یک سازنده یا یک روش متغیرهای نمونه و محلی درصورتی‌که دارای نام‌های مشابه باشند را جدا می‌کند.

class Student {

   int age;

   Student(int age) {

      this.age = age;

   }

}

  • یک نوع سازنده(سازنده پارامتری شده یا به‌طور پیش‌فرض) از دیگر در یک کلاس‌ها را فراخوانی می‌کند. این به عنوان سازنده صریح شناخته می‌شود.

class Student {

   int age

   Student() {

      this(20);

   }

   Student(int age) {

      this.age = age;

   }

}

مثال

در اینجا یک مثال آورده شده است که از این کلمه کلیدی برای دسترسی به اعضای یک کلاس استفاده کرده است. برنامه زیر را در یک پوشه با نام This_Example.java کپی و جایگذاری کنید.

public class This_Example {

   // Instance variable num

   int num = 10;

   This_Example() {

      System.out.println(“This is an example program on keyword this”);

   }

   This_Example(int num) {

      // Invoking the default constructor

      this();

      // Assigning the local variable num to the instance variable num

      this.num = num;

   }

   public void greet() {

      System.out.println(“Hi Welcome to Tutorialspoint”);

   }

   public void print() {

      // Local variable num

      int num = 20;

      // Printing the local variable

      System.out.println(“value of local variable num is : “+num);

      // Printing the instance variable

      System.out.println(“value of instance variable num is : “+this.num);

      // Invoking the greet method of a class

      this.greet();

   }

   public static void main(String[] args) {

      // Instantiating the class

      This_Example obj1 = new This_Example();

      // Invoking the print method

      obj1.print();

      // Passing a new value to the num variable through parametrized constructor

      This_Example obj2 = new This_Example(30);

      // Invoking the print method again

      obj2.print();

   }

}

نتیجه زیر حاصل می‌گردد

خروجی

This is an example program on keyword this

value of local variable num is : 20

value of instance variable num is : 10

Hi Welcome to Tutorialspoint

This is an example program on keyword this

value of local variable num is : 20

value of instance variable num is : 30

Hi Welcome to Tutorialspoint

متغیر آرگومان (var-args)

JDK 1.5 شما را قادر می‌سازد تا تعدادی از آرگومان‌های های همان نوع را به یک متد منتقل کنید. پارامتر در این روش به شرح زیر اعلام می‌شود:

 typeName… parameterName

در اعلام متد، نوع آورده شده بعد از علامت (…) مشخص می‌شود. فقط یک پارامتر طول- متغیر ممکن است در یک روش مشخص شود و این پارامتر باید آخرین پارامتر باشد. هر پارامتر منظم باید بر این مقدم است .

مثال

public class VarargsDemo {

   public static void main(String args[]) {

      // Call method with variable args

               printMax(34, 3, 3, 2, 56.5);

      printMax(new double[]{1, 2, 3});

   }

   public static void printMax( double… numbers) {

      if (numbers.length == 0) {

         System.out.println(“No argument passed”);

         return;

      }

      double result = numbers[0];

      for (int i = 1; i <  numbers.length; i++)

      if (numbers[i] >  result)

      result = numbers[i];

      System.out.println(“The max value is ” + result);

   }

}

نتیجه به‌صورت زیر است

خروجی

The max value is 56.5

The max value is 3.0

روش  finalize()تعریف یک متد که درست قبل از نابودی موضوع نهایی فراخوانی شده است را ممکن می‌کند.

متد finalize()

متد finalize()فراخوانی تعریف یک متد که درست قبل از نابودی موضوع نهایی توسط جمع کننده زباله را ممکن می‌کند. و تا این اطمینان حاصل شود که یک موضوع کاملاً پاک‌شده است می‌تواند مورداستفاده قرار گیرد.

به‌عنوان‌مثال، شما ممکن است از  finalize()استفاده کنید تا مطمئن شوید که فایل بازشده متعلق به موضوع بسته‌شده است. به‌منظور اضافه کردن یک پایان دهنده متد به کلاس، شما می‌توانید به‌راحتی  finalize() را تعریف کنید. برای بازیابی یک موضوع به کلاس، در مدت‌زمان اجرا متد فراخوانی می‌شود.

در داخل روش finalize()، شما باید آن اقداماتی را که باید قبل از اینکه یک موضوع نابود شود، مشخص کنید.

روشfinalize()   یک فرم کلی دارد و به‌صورت زیر است:

protected void finalize( ) {

   // finalization code here

}

در اینجا، کلمه کلیدی حفاظت‌شده مشخص‌کننده ممنوعیت دسترسی به () finalize توسط کد تعریف‌شده در خارج از کلاس آن است.

این بدان معنی است که نمی‌توانید بدانید چه زمانی  ()finalize  اجرا می‌شود و یا هرگز اجرا نمی‌شود. به‌عنوان‌مثال، اگر برنامه شما قبل از جمع‌آوری زباله به پایان برسد، ()finalize  اجرا نخواهد شد.

آنچه در آموزش بعدی خواهید خواند

در آموزش بعدی زبان برنامه نویسی جاوا با فایل‌ها و ورودی و خروجی (I/O) آشنا خواهید شد با ما همراه باشید.

torialspoint

Tags
درباره نویسنده

Leave a reply

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *