با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش برنامه نویسی جاوا را دنبال می کنند. متدها در جاوا مجموعه ای از دستورات است که با هم برای انجام عملیات خاصی گروه بندی می شوند. برای مثال، هنگامیکه سیستم () System.out.println را فراخوانی می کنید، این سیستم به طور خاص دستورات متعددی را برای نمایش پیام در کنسول اجرا می کند. متدها به کلاس ها رفتار می دهند و از تکراری شدن کدهای بسیاری جلوگیری کرده و اندازه ی برنامه را به حداقل می رسانند. از این رو یادگیری چگونگی کار با متدها در جاوا از اهمیت ویژه ای برخوردار است. و ما برای آشنایی شما با چگونگی کار با متدها در جاوا یا ایجاد متد در جاوا مباحث این آموزش را ارائه داده ایم.
ما ادامه ی مباحث این بخش را برای آشنایی شما با چگونگی کار با متدها در جاوا اختصاص داده ایم.
در ابتدا شما را با ساختار ایجاد متد در جاوا آشنا می کنیم:
1 2 3 | public static int methodName(int a, int b) { // body } |
ساختار فوق شامل بخش های زیر است:
تعریف متد شامل یک هدر متد و متد body است. همان طور که در ساختار زیر نشان داده شده است:
1 2 3 | modifier returnType nameOfMethod (Parameter List) { // method body } |
تشریح ساختار فوق:
مثال- در اینجا کد منبع متد بالا تعریف شده به نام ()min است. این متد دو پارامتر num1 و num2 را دریافت کرده و حداکثر بین دو مقدار را باز می گرداند:
1 2 3 4 5 6 7 8 9 10 11 | /** 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; } |
برای استفاده از یک متد، باید آن را نام برد. دو متد وجود دارد که در آن یک متد نامگذاری می شود.
یک متد مقدار یا مقدار هایی را بازمی گرداند و یا اینکه هیچ چیزی را برنمی گرداند.
فراخوانی متد بسیار ساده است و وقتی که یک متد فراخوانی می شود یکی از دو حالت زیر اتفاق می افتد:
مثالی از فراخوانی متد در جاوا:
1 | System.out.println("This is tutorialspoint.com!"); |
متد بازگشتی را می توان از طریق مثال زیر درک کرد:
1 | int result = sum(6, 9); |
در زیر نمونه ای برای نشان دادن چگونگی تعریف یک متد و نحوه تماس آن است.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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; } } |
نتیجه ی اجرای کد فوق بصورت زیر خواهد بود:
1 | Minimum value = 6 |
کلید واژه void به ما اجازه می دهد تا متد هایی را ایجاد کنیم که یک مقدار بازگشتی را نشان نمی دهند.
در مثال زیر، ما از متد void methodRankPoints استفاده می کنیم. این در واقع یک متد بدون بازگشت است.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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"); } } } |
نتیجه ی اجرای کد فوق بصورت زیر خواهد بود:
1 | Rank:A1 |
ارسال مقدار به پارامترهای یک متد باید بر اساس نوع و ترتیب تعریف آن ها در متد باشد.
پارامترها را می توان بطور مستقیم به متد معرفی کرده و یا با متغیر ارسال کرد.
مثال – مثال زیر ارسال پارامترها را بر اساس مقدار را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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); } } |
نتیجه ی اجرای کد فوق بصورت زیر خواهد بود:
1 2 3 4 5 6 | 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 |
هنگامی که یک کلاس دارای دو یا چند متد با یک نام است اما پارامترهای مختلفی دارند، آنگاه به عنوان بارگذاری متناوب (overloading) شناخته می شود.
مثال – در این جا با ارائه ی مثالی برای پیدا کردن حداقل عدد صحیح از بین پارامترهای ارسالی مفهوم overloading را روشن می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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; } } |
نتیجه ی اجرای کد فوق در جاوا بصورت زیر خواهد بود:
1 2 | Minimum Value = 6 Minimum Value = 7.3 |
مثال فوق دو متد با نام مشابه اما با نوع و پارامترهای مختلف را نشان می دهد که مقدارهای متفاوتی را نیز برمی گردانند.
گاهی اوقات شما می خواهید بعضی از اطلاعات را در یک برنامه زمانی که آن را اجرا میکنید منتقل کنید.
این کار با عبور آرگومان خط فرمان به () main انجام می شود.
آرگومان خط فرمان، اطلاعاتی است که به طور مستقیم بعد از نام برنامه در خط فرمان اجرا می شود.
آنها به صورت رشته ای در آرایه رشته ای به () main منتقل می شوند.
مثال- زیر برنامه ی زیر تمام اطلاعات خط فرمان را نمایش می دهد:
1 2 3 4 5 6 7 8 | public class CommandLine { public static void main(String args[]) { for(int i = 0; i<args.length; i++) { System.out.println("args[" + i + "]: " + args[i]); } } } |
سپس کد زیر را اجرا کنید:
1 | $java CommandLine this is a command line 200 -100 |
نتیجه ی کار بصورت زیر خواهد بود:
1 2 3 4 5 6 7 | args[0]: this args[1]: is args[2]: a args[3]: command args[4]: line args[5]: 200 args[6]: -100 |
this یک کلمه کلیدی در جاوا است که به عنوان یک مرجع به شی از کلاس فعلی، با یک متد نمونه استفاده می شود.
با استفاده از this می توانید اعضای یک کلاس مانند ساختارها، متغیرها و روش ها را ارجاع دهید.
توجه – کلمه کلیدی this تنها در متد نمونه یا ساختار مورد استفاده قرار می گیرد.
به طور کلی، کلید واژه this برای مورد زیر استفاده می شود :
متغیرهای نمونه را از متغیرهای محلی جدا کرده، البته اگر آنها یک نام، در داخل یک ساختار یا یک متد داشته باشند.
مثال:
1 2 3 4 5 6 | class Student { int age; Student(int age) { this.age = age; } } |
می توانید با یک نوع سازنده (سازنده پارامتری یا به طور پیش فرض) از دیگران در یک کلاس تماس بگیرید. که این ساختار invocation نامیده می شود.
مثال:
1 2 3 4 5 6 7 8 9 10 | class Student { int age Student() { this(20); } Student(int age) { this.age = age; } } |
مثال – مثال زیر کلمه کلیدی this برای دسترسی به اعضای یک کلاس استفاده می کند.
برنامه زیر را در یک پرونده با نام This_Example.java کپی و جایگذاری کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | 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(); } } |
نتیجه ی اجرای کد فوق در جاوا بصورت زیر خواهد بود:
1 2 3 4 5 6 7 8 | 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 |
JDK 1.5 شما را قادر می سازد تا تعدادی از آرگومان های همان نوع را به یک متد منتقل کنید.
پارامتر در متد به شرح زیر اعلام می شود:
1 | typeName... parameterName |
در اعلامیه متد، شما نوعی که بعد از پرانتز (…) مشخص می شود را مشخص می کنید.
فقط یک پارامتر در طول متغیر ممکن است در یک متد مشخص شود و این پارامتر باید آخرین پارامتر باشد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 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); } } |
نتیجه ی اجرای کد فوق بصورت زیر خواهد بود:
1 2 | The max value is 56.5 The max value is 3.0 |
این امکان وجو دارد که ما قبل از نابود شدن نهایی یک شیء یک متد تعریف کنیم که این متد ( ) finalize نامیده می شود.
از متد ( ) finalize می توان برای اطمینان از حذف کامل یک شیء استفاده کرد.
به عنوان مثال، شما ممکن است از ( ) finalize استفاده کنید تا مطمئن شوید که فایل باز شده متعلق به آن شیء بسته شده است یا خیر.
برای اضافه کردن یک فینالیست به یک کلاس، شما به سادگی متد ( ) finalize را تعریف می کنید.
در داخل متد ( ) finalize، شما باید آن اقداماتی را که باید قبل از اینکه یک شیء نابود شود را مشخص کنید.
ساختار متد ( ) finalize بصورت زیر است:
1 2 3 | protected void finalize( ) { // finalization code here } |
در ساختار فوق، کلمه کلیدی protected مانع دسترسی به ( ) finalize توسط کد تعریف شده در خارج از کلاس آن است.
متدها مجموعه ای از کدها در داخل یک بلوک محلی است که از قبل تعریف می کنیم و یک عمل خاص را انجام می دهند و ویژگی بارز آن ها این است که در بخش های مختلف برنامه قابل فراخوانی می باشد و در روند کد نویسی کمک بسیاری به برنامه نویسان می کند. از این رو مباحث این بخش را به چگونگی کار با متدها در جاوا اختصاص داده ایم.