มารู้จัก Static Variable บนภาษา Java กันบ้าง

17 August 2013 8:34 PM Programming
java

จากบทความที่แล้ว ผมได้อธิบายถึงการใช้งานคำสั่ง “static” กับ Method คราวนี้เรามาดูการใช้คำสั่ง “static” กับตัวแปรกันบ้างนะครับ

การกำหนดให้ตัวแปรเป็น Static (Static Variable) มีความหมายเช่นเดียวกับการกำหนดให้ Method เป็น static นั่นคือ เราสามารถใช้งานตัวแปรได้โดยไม่ต้องสร้าง Object ของ Class ขึ้นมาก่อน ซึ่งผลที่ตามมาคือ ตัวแปรนั้นจะกลายเป็นตัวแปรของ Class และทุกๆ Object ที่ถูกสร้างจาก Class นั้นๆ แทนที่จะเป็นตัวแปรใน Object ที่สร้างขึ้นมาจาก Class แยกต่างหาก(ซึ่งแต่ละ Object จะมีตัวแปรเป็นของตัวเอง) ทำให้ตัวแปรนั้นถูกใช้งานร่วมกันโดยทุกๆ Object เช่นถ้า Object หนึ่งเปลี่ยนแปลงค่าของ static variable ก็จะทำให้ Object อื่นๆ มองเห็นการเปลี่ยนแปลงนั้นด้วย ยกตัวอย่างง่ายๆ ต่อไปนี้

ผมสร้าง Class ของ Model ขึ้นมาตัวหนึ่งซึ่งมีตัวแปรอยู่ 2 ตัวคือ value1, value2 ซึ่ง value1 เป็นตัวแปรแบบ Static ส่วน value2 เป็นตัวแปรแบบธรรมดานะครับ หลังจากนั้นก็เขียน get(), set() ให้กับตัวแปรทั้ง 2 ตามฉบับธรรมดา (จะได้เหมือนชาวบ้าน จะได้ไม่งง ปกติผมไม่สร้าง มันเสีย Performance)

ต่อมา ผมสร้างไฟล์ชื่อ TestStaticVariable.java และสร้าง Main Method อยู่ข้างใน โดยผมสร้าง ArrayList ของ TestModel เพื่อให้เป็น List ของ Object ที่มาจาก TestModel แล้วผมก็วนลูป สร้าง Object ที่ชื่อว่า Model ที่มาจาก Class TestModel แล้วก็ป้อนค่าเข้าไปป้อนเสร็จก็เก็บไว้ใน ArrayList ที่ชื่อว่า modelLst หลังจากนั้นผมก็วนลูปแสดงผลออกมา เพื่อดูค่าของ value1, value2 ว่า แต่ละ Object ใน List มีค่าเท่าไหร่

ผลลัพธ์

Value 1 : 9 Value 2 : 0
Value 1 : 9 Value 2 : 1
Value 1 : 9 Value 2 : 2
Value 1 : 9 Value 2 : 3
Value 1 : 9 Value 2 : 4
Value 1 : 9 Value 2 : 5
Value 1 : 9 Value 2 : 6
Value 1 : 9 Value 2 : 7
Value 1 : 9 Value 2 : 8
Value 1 : 9 Value 2 : 9

จะเห็นได้ว่า value1 ที่เป็นตัวแปรแบบ static จะมีค่าเดียวกัน เพราะการกำหนด Static variable นั้นจะเปลี่ยนแปลงค่าให้กับทุกๆ Object ของ Model ที่เราสร้างขึ้นมาใหม่ ดังนั้นค่าสุดท้ายที่ถูกป้อนไว้คือ 9 ก็จะถูกกำหนดให้กับทุก Object ที่ได้สร้างไว้มาก่อนนั้นแล้วด้วย แตกต่างจาก value2 ซึ่งเป็นตัวแปรธรรมดา ก็จะมีค่าของใครของมันในแต่ละ Object ไม่ยุ่งเกี่ยวกัน ทำให้ได้ค่าเรียงตั้งแต่ 0-9

ง่ายๆ และเห็นได้ชัดใช่ไหมละครับ หากใครสงสัยหรือติดขัดตรงไหนสอบถามได้นะครับ

บทความนี้มีต้นฉบับมาจาก คู่มือการเขียนโปรแกรมด้วยภาษา Java หน้า 195 นะครับ
ผมนำมาเขียนและเรียบเรียง และยกตัวอย่างใหม่ให้เข้าใจได้ง่ายยิ่งขึ้นนะครับ