More Related Content
Similar to บทที่ 8 Methods
Similar to บทที่ 8 Methods (20)
More from Kanchana Theugcharoon
More from Kanchana Theugcharoon (19)
บทที่ 8 Methods
- 4. โดยที่ modifier คือ คีย์เวิร์ดที่กาหนดคุณสมบัติการเข้าถึงเมธอด
return_type คือ ชนิดของข้อมูลที่เมธอดจะส่งค่ากลับ ถ้าในกรณีที่ไม่มีการส่งค่าใดๆ
กลับจะกาหนดให้เป็น void
MethodName คือ ชื่อเมธอด
parameter คือ พารามิเตอร์ที่ใช้ในการรับข้อมูล
method_body คือ ชุดคาสั่งการทางานของเมธอด
varValue คือ ค่าที่ต้องการส่งค่ากลับ ในกรณีที่กาหนดให้ return_type เป็น
void จะไม่มีคาสั่ง return
- 5. 3. อาร์กิวเมนต์ (Argument) และพารามิเตอร์ (Parameter)
ในการเรียกใช้เมธอดนั้น เราสามารถส่งผ่านข้อมูลให้กับเมธอด
เพื่อให้เมธอดนั้นสามารถนาข้อมูลไปใช้ประมวลผลได้ ค่าของข้อมูลที่ส่ง
ให้กับเมธอด เรียกว่า อาร์กิวเมนต์ (argument) เช่น ในการเรียกใช้คาสั่ง
System.out.println("Hello");
“Hello” เป็น argument ที่ส่งให้กับเมธอด println() ซึ่งเมื่อมีการส่ง
ค่า argument ให้กับเมธอดแล้ว ที่ตัวของเมธอดจะต้องมีการสร้างตัวแปร
เพื่อใช้รับค่า argument นั้น ตัวแปรที่ถูกสร้างขึ้นมานี้มีชื่อเรียกว่า
พารามิเตอร์ (parameter)
- 6. จากตัวอย่างที่ 1 newDay, newMonth และ newYear คือ parameter ของเมธอด
setDate ในการเรียกใช้งานเมธอดนั้น จานวน argument ที่จะส่งให้กับเมธอด
จะต้องมีจานวนตรงกับจานวน parameter ที่จะมารับเสมอ
- 7. จากตัวอย่างที่ 2 ค่า 18, 10 และ 2556 คือ argument ที่ส่งให้กับเมธอด
setDate โดยค่าเหล่านี้จะถูกส่งไปเก็บไว้ที่ parameter ที่ชื่อว่า newDay,
newMonth และ newYear ตามลาดับ
- 8. 4. การเรียกใช้งานเมธอด
การเรียกใช้งานเมธอดจะมีส่วนหลักๆ อยู่ 2 ส่วน คือ การส่งค่า
arguments ให้กับเมธอด และการรับค่าที่ส่งคืนมาจากเมธอด
4.1 การส่งค่า argument ให้กับเมธอด
ในการจะส่งค่า argument ให้กับเมธอด เราจะต้องประกาศ
parameter สาหรับเมธอดนั้นๆ โดยจะต้องระบุชนิดข้อมูล ตามด้วยชื่อของ
parameter ถ้าหากต้องการให้มี parameter มากกว่าหนึ่งตัว สามารถทา
ได้โดยใช้เครื่องหมาย , (comma) คั่นในตอนที่เราสร้างเมธอด ดูได้จาก
ตัวอย่างที่ 1
- 9. การเรียกใช้เมธอด หากเมธอดนั้นมีการรับค่าด้วย parameter เราต้องทาการส่ง
argument ให้กับเมธอดนั้น โดยที่จานวน argument นั้นต้องเท่ากับจานวน parameter ที่เรา
ประกาศไว้ โดยคั่นระหว่าง argument แต่ละตัวด้วยเครื่องหมาย comma และชนิดข้อมูล
ของ argument นั้นต้องตรงกับชนิดข้อมูลของ parameter ด้วย ดูได้จากตัวอย่างที่ 2
ค่าของ argument ที่จะส่งนั้น อาจจะเป็นค่าคงที่(constant) เช่น 10 (int
constant), -1.2 (double constant), ‘a’ (char constant), true (boolean constant) หรือ
ตัวแปร (variable) เช่น x, myDog, std1.name หรือนิพจน์ (expression) เช่น x*x / 2 -
1.732, date.getDay() ก็ได้ แต่ชนิดข้อมูลนั้นจะต้องสอดคล้องกับชนิดข้อมูลของ
parameter
การส่งค่าให้กับเมธอดในภาษาจาวานั้น เป็นการส่งค่าแบบ pass by value
หมายความว่า เมื่อมีการเรียกใช้งานเมธอด โปรแกรมจะทาการสร้างตัวแปรขึ้นมาใหม่ในเมธ
อดที่ถูกเรียก เพื่อมารับค่าที่จะถูกส่งเข้ามา การแก้ไขค่าของ parameter ในเมธอดจึงไม่
ส่งผลกระทบกับตัวแปรต้นฉบับหากตัวแปรนั้นเป็นข้อมูลชนิดพื้นฐาน (primitive type)
- 10. จากตัวอย่างที่ 3 สาเหตุที่ x ยังคงมีค่าเท่ากับ 10 ภายหลังจากการเรียกใช้งานเมธอด add5
เนื่องจากว่าตัวแปร x ที่อยู่ใน main กับตัวแปร x ที่อยู่ในเมธอด add5 เป็นคนละตัวกัน ดังนั้น คาสั่ง
x = x + 5 จึงส่งผลกับแปร x ที่อยู่ในเมธอด add5 เท่านั้น และเมื่อเรากลับมาที่ main ค่าของ x ใน
main จึงมีค่าเท่าเดิม
อย่างไรก็ตาม หาก object ที่ส่งให้กับเมธอดมีชนิดข้อมูลเป็นแบบอ้างอิง (reference
type) การเปลี่ยนค่า attribute ของ object นั้นๆในเมธอด จะส่งผลกระทบกับ object ต้นฉบับด้วย
ดังตัวอย่างต่อไปนี้
- 12. จากตัวอย่างที่ 4 สาเหตุที่ num มีค่าเปลี่ยนไปหลังจากเรียกใช้งานเมธอดก็เพราะว่าตัวแปรชนิด
object ทุกๆตัวนั้นเป็นประเภท reference type เสมอ ซึ่งสิ่งที่เก็บอยู่ในตัวแปร reference type คือ
ตาแหน่งที่อยู่(adddress)ในหน่วยความจาที่ object นั้นๆ ถูกเก็บอยู่ในตอนที่มันถูกสร้างขึ้นมาด้วย
คาสั่ง new ดังนั้นในตอนที่เราเรียกใช้เมธอด add10(obj) นั้น ค่าที่ถูกส่งให้กับเมธอดคือตาแหน่งที่
อยู่ของตัว object เมื่อเราทาการเปลี่ยนค่าของ object ในตัวเมธอด ค่านั้นจะถูกเปลี่ยนที่ตัว object
ตามตาแหน่งที่อยู่ที่มันถูกเก็บไว้ ตัว object ต้นฉบับจึงถูกเปลี่ยนค่าไปด้วย
- 13. 4.2 การรับค่าคืนจากเมธอด
หากเมธอดมีการส่งค่าคืน (มี return type ที่ไม่ใช่ void) เราจะต้องสั่งให้เมธอดทาการส่ง
ค่ากลับ ซึ่งทาได้โดยใช้คาสั่ง return value; โดยวางคาสั่งนี้ไว้ที่ตัวเมธอด ทั้งนี้value คือค่าที่เรา
ต้องการส่งกลับ ดังตัวอย่างต่อไปนี้
จากตัวอย่างที่ 5 ค่าที่ส่งกลับมาจากเมธอดนั้น เราสามารถที่จะนาไปเก็บไว้ในตัวแปรก่อน (โดยที่
ชนิดข้อมูลจะต้องตรงกับชนิดข้อมูลที่เมธอด return มาให้) หรือว่าเราสามารถที่จะนาไปใช้เลย
โดยตรงก็ได้ ดังเช่นบรรทัดที่ 7 และ 9 ตามลาดับ
- 15. 5.1 Instance Method
Instance method คือเมธอดที่กระทากับตัว object โดยตรง ดังเช่นใน
ตัวอย่างที่ 1 setDate ถือเป็น instance method เพราะว่า setDate จะกระทากับ
object ที่เรียกใช้มันเท่านั้น จากตัวอย่างที่ 2 จะเห็นได้ว่า การจะเรียกใช้งานเมธอด
setDate นั้น เราจะต้องทาการสร้าง object (ในที่นี้คือ date) ขึ้นมาก่อน แล้วเรียกใช้
ผ่าน object นั้น (บรรทัดที่ 3 และ 4)
เราสามารถใช้คีย์เวิร์ด this เพื่อเรียกถึง object ที่ทาการเรียกใช้เมธอดนั้นๆได้
ตัวอย่างเช่น
- 16. เราสามารถใช้คีย์เวิร์ด this เพื่อเรียกถึง object ที่ทาการเรียกใช้เมธอดนั้นๆได้ ตัวอย่างเช่น
จากตัวอย่างที่ 6 ในเมธอด setDate มี parameter 3 ตัว ได้แก่ day, month และ year ซึ่งจะเห็นว่า
หากเราเขียนว่า day = day; อาจจะทาให้โปรแกรมทางานผิดพลาดได้ เพราะว่า day ทั้งสองตัวนั้น
อ้างถึงตัวแปรเดียวกันที่เป็น parameter ของเมธอด การที่เราจะอ้างอิงถึง day ที่เป็น instance
variable นั้น ทาได้โดยใช้ this.day แทน ซึ่ง this จะมีค่าเท่ากับตัว object ที่เรียกใช้ อย่างไรก็ตาม
ไม่แนะนาให้ตั้งชื่อ parameter ให้เหมือนกับชื่อ instance variable เพราะอาจจะทาให้สับสนได้
ดังนั้น ควรจะตั้งชื่อ parameter ให้ต่างจากชื่อ attribute ดังเช่นตัวอย่างที่ 1
- 17. 5.2 Static Method
Static method (หรือเรียกอีกชื่อหนึ่งว่า class method) คือเมธอดที่มีพฤติกรรมที่ไม่
ขึ้นอยู่กับ object ใดๆ ตัวอย่างเช่น เมธอด abs สาหรับหาค่าสัมบูรณ์นั้น ควรจะมีพฤติกรรมที่ไม่
ขึ้นอยู่กับ object ที่จะทาการเรียกใช้ แต่ขึ้นอยู่กับ argument ของเมธอดเท่านั้น นอกจากนี้ผู้ใช้ควร
จะสามารถเรียกใช้เมธอด abs ได้โดยไม่ต้องทาการสร้าง object ขึ้นมาใหม่ วิธีการทาเช่นนี้ในภาษา
จาวาทาได้โดยใส่คีย์เวิร์ด static ไว้หน้าชื่อของเมธอด (แต่อยู่หลังจาก access modifier) ดัง
ตัวอย่างต่อไปนี้
- 18. การเรียกใช้งาน static method นั้น เราสามารถเรียกใช้งานผ่านชื่อคลาสได้โดยตรงโดยไม่ต้องมีการ
สร้าง object ขึ้นมาก่อน ดังตัวอย่างที่ 8
ข้อควรระวังสาหรับการใช้งาน static method ก็คือ เราไม่สามารถเรียกใช้งาน instance variable
หรือ instance method จากภายใน static method ได้ แต่ยังเราสามารถเรียกใช้งาน static
variable หรือ static method อื่นๆได้อยู่
- 19. 5.3 Constructor Method
Constructor method เป็นเมธอดที่มีลักษณะพิเศษ คือมีชื่อเหมือนกับชื่อ
คลาสและไม่มีการกาหนดชนิดของข้อมูลที่ถูกส่งกลับ(return type) โดย constructor
จะถูกเรียกใช้เมื่อมีการใช้คาสั่ง new ดังเช่นบรรทัดที่ 3 ของตัวอย่างที่ 2 ทั้งนี้หน้าที่
ของ constructor คือกาหนดค่าเริ่มต้นให้กับ attribute ของ object ที่ถูกสร้างขึ้นมา
การประกาศ constructor สามารถทาได้เหมือนกับเมธอดอื่นๆ ตัวอย่างเช่น
- 20. ตัวอย่างที่ 9 คลาส Date ประกอบด้วย constructor สองตัว คือบรรทัดที่ 4 – 8 ซึ่งเป็น constructor
ที่ไม่มีการรับค่า parameter และบรรทัดที่ 10 – 14 ซึ่งมีการรับค่า parameter เป็น int 3 ตัว (การที่
เรามีเมธอดที่มีชื่อเหมือนกันมากกว่าหนึ่งเมธอด จะเรียกว่า method overloading ซึ่งรายละเอียด
จะกล่าวในหัวข้อที่ 6)
หากเราสร้างคลาสโดยไม่สร้าง constructor ขึ้นมาเอง (ดังเช่นตัวอย่างที่ 1) จาวาจะทาการสร้าง
default constructor ที่ไม่มีการรับค่า parameter แล้วกาหนดค่า instance variable ให้เป็นค่าตาม
default value ให้โดยอัตโนมัติ
อย่างไรก็ตาม หากเราสร้าง constructor ขึ้นมาเองอย่างน้อยหนึ่งตัว จาวาจะไม่สร้าง default
construct ให้กับเรา และถ้าเราต้องการใช้ constructor ที่ไม่รับค่า argument เราจะต้องสร้างขึ้นมา
เอง ตัวอย่างเช่น
- 22. 6. Method Overloading
Method overloading คือการที่เมธอดมากกว่าหนึ่งตัวที่อยู่ภายในคลาส
เดียวกันมีชื่อเหมือนกัน (เช่น จากตัวอย่างที่ 9 มี constructor ที่ชื่อว่า Date
เหมือนกันสองตัว)
Method overloading สามารถทาได้ถ้าหากว่ามีอย่างน้อยหนึ่งข้อต่อไปนี้
เป็นจริง
(1) จานวน parameter ของเมธอดที่จะ overload นั้นไม่เท่ากัน
(2) ชนิดข้อมูลของ parameter นั้นต่างกันอย่างน้อยหนึ่งตัว
- 28. เมธอดเหล่านี้เป็น instance method เวลาจะเรียกใช้ เราต้องเรียกใช้ผ่าน object ตัวอย่างเช่น
"abc".length();
หรือ
String s = "This is a sample string";
boolean flag = s.contains("sample");
หมายเหตุ: เมธอด concat, toLowerCase, toUppercase จะไม่ทาการเปลี่ยนค่าของตัว string ที่
เรียกใช้โดยตรง แต่จะ return ค่าของ string อันใหม่ที่เป็นผลลัพธ์ของเมธอดแทน ดังนั้น หากเรา
ต้องการเปลี่ยนค่าของตัวแปรต้นฉบับโดยเมธอด concat, toLowerCase, toUppercase, etc. เรา
จะต้องมีการกาหนดค่าให้กับมันเอง เช่น
s = s.concat("abc");
s = s.toLowerCase();
s = s.toUpperCase();
- 29. จัดทำโดย
นำงสำวกำญจนำ ถึกจรูญ เลขที่21
นำงสำวขวัญจิรำ โพธิ์ล้อม เลขที่28
นำงสำวจิดำภำ บำรุงวงศ์ เลขที่ 29
นำงสำวณัฐฐำ ศรีอินทร์ เลขที่ 30
นำงสำวพิมพ์ลภัส กลมทุกสิ่ง เลขที่ 31
นำงสำวสิริลักษณ์ วุฒิมงคลกุล เลขที่32
นำงสำวเกสรำ วัจนะ เลขที่ 38
ชั้น มัธยมศึกษำปีที่ 6/2
เสนอ
คุณครู ทรงศักดิ์ โพธิ์เอี่ยม