Java - วิธีการ
วิธี Java คือชุดของคำสั่งที่รวมกลุ่มกันเพื่อดำเนินการ เมื่อคุณเรียก System.outprintln() วิธีการตัวอย่างเช่นระบบเรียกใช้คำสั่งต่างๆเพื่อแสดงข้อความบนคอนโซล
ตอนนี้คุณจะได้เรียนรู้วิธีสร้างวิธีการของคุณเองโดยมีหรือไม่มีค่าส่งคืนเรียกใช้วิธีการที่มีหรือไม่มีพารามิเตอร์และใช้วิธีการที่เป็นนามธรรมในการออกแบบโปรแกรม
การสร้างวิธีการ
พิจารณาตัวอย่างต่อไปนี้เพื่ออธิบายไวยากรณ์ของวิธีการ -
Syntax
public static int methodName(int a, int b) {
// body
}
ที่นี่
public static - ตัวปรับแต่ง
int - ประเภทผลตอบแทน
methodName - ชื่อของวิธีการ
a, b - พารามิเตอร์ที่เป็นทางการ
int a, int b - รายการพารามิเตอร์
คำจำกัดความของวิธีการประกอบด้วยส่วนหัวของวิธีการและเนื้อหาของวิธีการ สิ่งเดียวกันนี้แสดงในไวยากรณ์ต่อไปนี้ -
Syntax
modifier returnType nameOfMethod (Parameter List) {
// method body
}
ไวยากรณ์ที่แสดงด้านบนประกอบด้วย -
modifier - กำหนดประเภทการเข้าถึงของวิธีการและเป็นทางเลือกที่จะใช้
returnType - เมธอดอาจส่งคืนค่า
nameOfMethod- นี่คือชื่อเมธอด ลายเซ็นเมธอดประกอบด้วยชื่อเมธอดและรายการพารามิเตอร์
Parameter List- รายการพารามิเตอร์เป็นประเภทลำดับและจำนวนพารามิเตอร์ของวิธีการ วิธีเหล่านี้เป็นทางเลือกวิธีการอาจมีพารามิเตอร์เป็นศูนย์
method body - เนื้อความของวิธีการกำหนดว่าวิธีการนี้ทำอะไรกับงบ
Example
นี่คือซอร์สโค้ดของวิธีการที่กำหนดไว้ข้างต้นที่เรียกว่า 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;
}
วิธีการโทร
สำหรับการใช้วิธีนั้นควรเรียกว่า มีสองวิธีที่เรียกเมธอดคือเมธอดส่งคืนค่าหรือคืนค่าอะไร (ไม่มีค่าส่งคืน)
ขั้นตอนวิธีการโทรนั้นง่ายมาก เมื่อโปรแกรมเรียกใช้วิธีการควบคุมโปรแกรมจะถูกโอนไปยังเมธอดที่เรียกว่า วิธีที่เรียกว่านี้จะส่งคืนการควบคุมไปยังผู้โทรในสองเงื่อนไขเมื่อ -
- คำสั่ง return ถูกดำเนินการ
- ถึงเมธอดที่สิ้นสุดการปิดวงเล็บปีกกา
วิธีการคืนโมฆะถือเป็นการเรียกไปยังคำสั่ง ลองพิจารณาตัวอย่าง -
System.out.println("This is tutorialspoint.com!");
วิธีการคืนค่าสามารถเข้าใจได้จากตัวอย่างต่อไปนี้ -
int result = sum(6, 9);
ต่อไปนี้เป็นตัวอย่างเพื่อสาธิตวิธีการกำหนดวิธีการและวิธีการเรียกใช้ -
Example
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;
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Output
Minimum value = 6
คีย์เวิร์ดที่เป็นโมฆะ
คีย์เวิร์ดที่เป็นโมฆะช่วยให้เราสามารถสร้างเมธอดที่ไม่ส่งคืนค่า ที่นี่ในตัวอย่างต่อไปนี้เรากำลังพิจารณาวิธีการที่เป็นโมฆะmethodRankPoints วิธีนี้เป็นวิธีโมฆะซึ่งไม่ส่งคืนค่าใด ๆ การเรียกใช้เมธอด void ต้องเป็นคำสั่งเช่นmethodRankPoints (255.7); . เป็นคำสั่ง Java ที่ลงท้ายด้วยอัฒภาคตามที่แสดงในตัวอย่างต่อไปนี้
Example
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");
}
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Output
Rank:A1
การส่งผ่านพารามิเตอร์ตามค่า
ในขณะที่ทำงานภายใต้กระบวนการโทรข้อโต้แย้งจะถูกส่งผ่าน สิ่งเหล่านี้ควรอยู่ในลำดับเดียวกันกับพารามิเตอร์ที่เกี่ยวข้องในข้อกำหนดวิธีการ พารามิเตอร์สามารถส่งผ่านโดยค่าหรือโดยการอ้างอิง
การส่งผ่านพารามิเตอร์ตามค่าหมายถึงการเรียกใช้เมธอดด้วยพารามิเตอร์ ด้วยวิธีนี้ค่าอาร์กิวเมนต์จะถูกส่งไปยังพารามิเตอร์
Example
โปรแกรมต่อไปนี้แสดงตัวอย่างการส่งผ่านพารามิเตอร์ตามค่า ค่าของอาร์กิวเมนต์ยังคงเหมือนเดิมแม้ว่าจะมีการเรียกใช้เมธอดแล้วก็ตาม
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);
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Output
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
วิธีการโอเวอร์โหลด
เมื่อคลาสมีสองเมธอดหรือมากกว่าโดยใช้ชื่อเดียวกัน แต่พารามิเตอร์ต่างกันเรียกว่าเมธอดโอเวอร์โหลด มันแตกต่างจากการลบล้าง ในการลบล้างเมธอดจะมีชื่อเมธอดประเภทจำนวนพารามิเตอร์และอื่น ๆ เหมือนกัน
ลองพิจารณาตัวอย่างที่กล่าวถึงก่อนหน้านี้เพื่อค้นหาจำนวนเต็มขั้นต่ำ ถ้าสมมุติว่าเราต้องการหาจำนวนขั้นต่ำของประเภทคู่ จากนั้นจะมีการนำแนวคิดเรื่องการโอเวอร์โหลดมาใช้เพื่อสร้างเมธอดสองวิธีขึ้นไปที่มีชื่อเดียวกัน แต่พารามิเตอร์ต่างกัน
ตัวอย่างต่อไปนี้อธิบายเหมือนกัน -
Example
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;
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Output
Minimum Value = 6
Minimum Value = 7.3
วิธีการโอเวอร์โหลดทำให้โปรแกรมอ่านได้ ที่นี่มีการกำหนดสองวิธีโดยใช้ชื่อเดียวกัน แต่มีพารามิเตอร์ต่างกัน จำนวนขั้นต่ำจากจำนวนเต็มและประเภทคู่คือผลลัพธ์
การใช้อาร์กิวเมนต์บรรทัดคำสั่ง
บางครั้งคุณอาจต้องการส่งข้อมูลบางอย่างไปยังโปรแกรมเมื่อคุณเรียกใช้ สิ่งนี้ทำได้โดยส่งอาร์กิวเมนต์บรรทัดคำสั่งไปยัง main ()
อาร์กิวเมนต์บรรทัดคำสั่งคือข้อมูลที่ต่อท้ายชื่อโปรแกรมบนบรรทัดคำสั่งโดยตรงเมื่อดำเนินการ ในการเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งภายในโปรแกรม Java นั้นค่อนข้างง่าย ซึ่งจะถูกเก็บเป็นสตริงในอาร์เรย์ String ที่ส่งผ่านไปยัง main ()
Example
โปรแกรมต่อไปนี้แสดงอาร์กิวเมนต์บรรทัดคำสั่งทั้งหมดที่เรียกด้วย -
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
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Output
args[0]: this
args[1]: is
args[2]: a
args[3]: command
args[4]: line
args[5]: 200
args[6]: -100
คีย์เวิร์ดนี้
thisเป็นคีย์เวิร์ดใน Java ซึ่งใช้อ้างอิงถึงอ็อบเจ็กต์ของคลาสปัจจุบันด้วยวิธีอินสแตนซ์หรือคอนสตรัคเตอร์ การใช้สิ่งนี้ทำให้คุณสามารถอ้างอิงสมาชิกของคลาสเช่นตัวสร้างตัวแปรและวิธีการ
Note- คำหลักนี้ใช้เฉพาะในวิธีการของอินสแตนซ์หรือตัวสร้าง
โดยทั่วไปคำหลักนี้ใช้เพื่อ -
แยกความแตกต่างของตัวแปรอินสแตนซ์จากตัวแปรโลคัลหากมีชื่อเดียวกันภายในตัวสร้างหรือวิธีการ
class Student {
int age;
Student(int age) {
this.age = age;
}
}
เรียกตัวสร้างประเภทหนึ่ง (ตัวสร้างพารามิเตอร์หรือค่าเริ่มต้น) จากตัวสร้างอื่น ๆ ในคลาส เรียกว่าการเรียกตัวสร้างที่ชัดเจน
class Student {
int age
Student() {
this(20);
}
Student(int age) {
this.age = age;
}
}
Example
นี่คือตัวอย่างที่ใช้คีย์เวิร์ดนี้เพื่อเข้าถึงสมาชิกของคลาส คัดลอกและวางโปรแกรมต่อไปนี้ในไฟล์ที่มีชื่อ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();
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Output
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
ในการประกาศวิธีการให้คุณระบุประเภทตามด้วยจุดไข่ปลา (... ) สามารถระบุพารามิเตอร์ความยาวตัวแปรได้เพียงตัวเดียวในเมธอดและพารามิเตอร์นี้ต้องเป็นพารามิเตอร์สุดท้าย พารามิเตอร์ปกติใด ๆ ต้องอยู่ข้างหน้า
Example
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);
}
}
สิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -
Output
The max value is 56.5
The max value is 3.0
วิธีการสรุป ()
เป็นไปได้ที่จะกำหนดวิธีการที่จะถูกเรียกใช้ก่อนการทำลายครั้งสุดท้ายของวัตถุโดยตัวเก็บขยะ วิธีนี้เรียกว่าfinalize( )และสามารถใช้เพื่อให้แน่ใจว่าวัตถุสิ้นสุดลงอย่างสมบูรณ์
ตัวอย่างเช่นคุณอาจใช้ finalize () เพื่อให้แน่ใจว่าไฟล์ที่เปิดอยู่ของอ็อบเจ็กต์นั้นปิดอยู่
ในการเพิ่ม Finalizer ให้กับคลาสคุณเพียงแค่กำหนดวิธีการ finalize () รันไทม์ของ Java เรียกใช้เมธอดนั้นเมื่อใดก็ตามที่กำลังจะรีไซเคิลอ็อบเจ็กต์ของคลาสนั้น
ภายในเมธอด finalize () คุณจะระบุการดำเนินการที่ต้องดำเนินการก่อนที่วัตถุจะถูกทำลาย
วิธี finalize () มีรูปแบบทั่วไปนี้ -
protected void finalize( ) {
// finalization code here
}
ในที่นี้คำหลักที่ได้รับการป้องกันคือตัวระบุที่ป้องกันการเข้าถึงเพื่อสรุป () โดยรหัสที่กำหนดไว้นอกคลาส
ซึ่งหมายความว่าคุณไม่สามารถทราบได้ว่าจะดำเนินการ Finalize () เมื่อใดหรือแม้ว่า ตัวอย่างเช่นหากโปรแกรมของคุณสิ้นสุดลงก่อนที่การรวบรวมขยะจะเกิดขึ้น finalize () จะไม่ดำเนินการ