ความหมายของ static จัดทำโดย : Mr.POP พิมพ์
 Untitled Document

สวัสดีครับ บทความนี้ผมจะมาเสนอเรื่องราวของ keyword ตัวหนึ่งที่ผ่านตามาเรามาหลายครั้งแล้วในการเขียนโปรแกรม นะครับ นั่นคือ static ครับ เราคงจะเคยเห็นคำว่า static อยู่ในส่วนต่างๆ ของโปรแกรมและสงสัยว่ามันมีหน้าที่อะไร ในบทความนี้ จะไขข้อสงสัยดังกล่าวครับว่ามันมีหน้าที่อะไรกันแน่

ความหมายของ static เมื่อวางไว้หน้าตัวแปรใดๆ
static เมื่อวางไว้หน้าตัวแปรใดๆ ที่เป็นสมาชิกของคลาสจะทำให้สมาชิกตัวนั้นถูกสร้างขึ้นบนพื้นที่คลาสเท่านั้น และมีเพียงก๊อปปี้เดียว ส่วนสมาชิกใดที่ไม่เป็น static ก็จะถูกสร้างขึ้นบนพื้นที่ของ instance โดยมีหนึ่งก๊อปปี้ต่อหนึ่ง instance ลองมาดูภาพประกอบกันนะครับ

จากคลาส MyClass จะมีสมาชิกที่เป็นตัวแปรอยู่ 2 ตัว คือ n และ x โดยตัวแปร n จะถูกประกาศเป็น static และมี Method 1 ตัวชื่อ getX() ผมจะสร้าง instance ขึ้นมา 2 ตัวจากคำสั่ง

MyClass a = new MyClass();
MyClass b = new MyClass();

เมื่อสร้าง instance แล้วจะเกิดเหตุการณ์คือ ตัวแปร x นั้นถูกสร้างขึ้นมาคนละ 1 ตัวใน instance ของทั้งสอง(ของใครของมัน) เวลาเรียกใช้ x ทั้งสองก็จะอยู่คนละส่วนกัน(เพราะเป็นคนละ instance) แต่ตัวแปร n จะไม่เป็นในลักษณะดังกล่าวเนื่องจากเป็น static ซึ่งจะถูกสร้างบนพื้นที่ของคลาสเท่านั้นและมีเพียงก๊อปปี้เดียว ดังนั้นเวลาที่ instance ทั้งสองเรียกใช้ตัวแปร n ก็จะมีการ reference ไปที่พื้นที่ของ MyClass เพื่อเรียกใช้ตัวแปร n มาใช้งานซึ่งจะมองเป็นตัวแปรตัวเดียวกันนั่นเอง เราอาจจะเรียกตัวแปร n อีกอย่างว่า "Class Variable" และเราสามารถเรียกใช้ตัวแปร n ภายนอกคลาสได้โดยใช้ชื่อคลาสเรียก เช่น MyClass.n โดยไม่ต้องผ่าน instance เลย

ส่วน Method ที่อยู่ในคลาสจะถูกเก็บไว้ภายในพื้นที่ของคลาสนั้นๆ เลยและใช้การ reference ไปที่ Method เหล่านั้นเมื่อต้องการใช้งาน เหตุที่เป็นเช่นนี้เพราะจะเป็นการประหยัดพื้นที่ของหน่วยความจำให้กับโปรแกรมนั่นเอง ซึ่งพื้นที่ที่ใช้เก็บ Method นั้นจะถูกสร้างขึ้นมาเพียงครั้งเดียวเท่านั้นตอนที่เราประกาศคลาส(ในตัวอย่างคือ MyClass) และเมื่อสร้าง instance ขึ้นมาก็ไม่จำเป็นต้องสร้าง Method ขึ้นมาให้กับ instance ซ้ำอีกเพียงแต่เก็บค่า reference ที่จะไปเรียกใช้งาน Method มาก็พอแล้ว จะมีการสร้างแค่ตัวแปรที่ไม่ได้กำหนดเป็น static เท่านั้น(ใี้นตัวอย่างคือ x) เพราะตัวแปรเหล่านี้อาจจะเก็บค่าไม่เหมือน กันขึ้นอยู่แต่ละ instance

ความหมายของ static เมื่อวางอยู่หน้า Method
static เมื่อนำไปวางไว้หน้า Method ใดๆ จะทำให้สามารถเรียกใช้ Method นั้นภายในคลาสได้โดยไม่ต้องใช้ instance เรียกเลย ผมขอยกตัวอย่างเก่ามาแสดงให้เห็นนะครับ

จากรูปเราจะเห็นว่ามีการเรียกใช้ printCircle ในคลาส TestPass1 โดยไม่ต้องผ่าน instance เลยเนื่องจาก printCircle ถูกกำหนดเป็น static

ครับก็คงจะเพิ่มความกระจ่างมากขึ้นนะครับเกี่ยวกับ keyword ที่ชื่อ static ในคราวหน้าก็คงจะได้พบการคุณสมบัติการสืบทอดของ การเขียนโปรแกรมแบบ OOP กันแล้วนะครับ หลังจากที่วนเวียนอยู่ในเืรื่องของ Method มาพอสมควร บทความนี้ผมก็ขอจบไว้เพียงแค่นี้นะครับ...

 

คุณอาจสนใจ
การสร้างข่าวแบบ RSS
Zerohate (44,297 - 28 ม.ค. 51)
การส่งข้อมูลผ่านฟอร์ม
Mr.GuruZ (42,071 - 03 มิ.ย. 49)
เลือกแสดงแถบเครื่องมือแบบแถวเดียว หรือสองแถว
นายนุก (19,572 - 06 มี.ค. 51)
การใช้งาน Layer
Mr.GuruZ (43,723 - 04 มิ.ย. 49)
การทำก้อนเมฆ
ดินสอ (145,580 - 17 ก.ค. 49)
การสร้าง cookie กำหนดเวลาการอนุญาติ
Tung (33,345 - 23 ธ.ค. 50)
การใช้งาน PowerPoint โดยเลือกใช้รูปแบบ Blank presentation
หมูขุน (14,992 - 04 ก.พ. 50)
การเพิ่มเม็ดฝนลงในภาพ
Lek (70,165 - 04 มิ.ย. 49)