[Java] Java Static Variable และ Static Method
เรื่องนี้ความจริงเป็นส่วนขยายจาก keyword และสิทธิ์การเข้าถึงตัวแปร/method ภาษา Java โดยจะเป็นเฉพาะส่วนของ static ซึ่ง static คืออะไรนั้น น่าจะเข้าใจได้ชัดเจนมากยิ่งขึ้นในหัวข้อนี้นะครับ
static เป็นคำสงวน (Reserved Word) ซึ่งใช้ระบุว่าตัวแปรหรือฟังก์ชันให้มีความเป็นหนึ่งเดียว Attribute หรือ Method ที่เป็น static แม้ว่าเราจะมีการสร้าง Object ใหม่ไม่ว่ากี่ครั้งก็ตาม ค่าต่างๆก็จะเป็นค่าเดียวกัน ซึ่งส่วนใหญ่แล้ว static มักใช้ในการทำอะไรที่เหมือนๆกัน เช่น config ของ Logger เพราะว่า ไม่ว่า Logger ยังไงๆ เราก็ใช้เก็บ log ไม่มีการคำนวณอะไรอย่างอื่นแน่ๆ ดังนั้นเพื่อให้ไม่เป็นการเปลืองทรัพยากรมาก ดังนั้นจอง Memory เพียงครั้งเดียวแล้วใช้กับทุกๆ Class ก็เพียงพอ
static variable หรือ ประเภทตัวแปรแบบ static
จากที่กล่าวไปข้างต้นแล้วว่า static จะจอง Memory เพียงครั้งเดียว ไม่ว่าเราจะเอา Class ไป new ใหม่สักกี่ครั้ง เช่น
จากตัวอย่างนี้อาจจะทำให้เข้าใจนะครับว่า ทั้ง myObj1 และ myObj2 ต่างมี static variable ชื่อ myStatic และเป็น myStatic ตัวเดียวกันใน memory เพราะฉะนั้น Output ของข้อนี้จะเป็น 999999 ซึ่งเป็นค่าของ myStatic นั่นเอง
static method
static method เป็น method ที่มีลักษณะคล้าย static variable คือ การอ้างถึงโดยไม่จำเป็นต้องประกาศ Object หรืออาจจะประกาศ แต่ยังไงก็เป็นตัวเดียวกันอยู่ดี แต่การอ้างถึงระหว่าง method อื่นๆนั้น หากเป็น non-static method หรือ non-static variable ก็จะไม่สามารถเรียกจาก static method ได้ ในทางกลับกัน non-static method จะสามารถเรียก static variable & static method ได้ตามปกติ
หาก copy ตัวอย่างนี้ไปวางใน Eclipse ก็จะมีการเตือนตามจุดที่ (1),(2) และ (3) ว่า Cannot make a static reference ......... ซึ่งก็จะเป็นตามที่ได้กล่าวไว้ข้างต้น "non-static method หรือ non-static variable ก็จะไม่สามารถเรียกจาก static method"
เรื่องของ static variable และ static method ก็จะเป็นตามที่ได้เขียนมานะครับ ผมคิดว่าตัวอย่าง ExampleStatic นี่จะทำให้เห็นภาพมากขึ้นทีเดียวแหละ ในส่วนของการนำไปใช้ ลองเลือกให้เหมาะสมนะครับ ^^
Me Gusta Meme - TV Static |
static variable หรือ ประเภทตัวแปรแบบ static
จากที่กล่าวไปข้างต้นแล้วว่า static จะจอง Memory เพียงครั้งเดียว ไม่ว่าเราจะเอา Class ไป new ใหม่สักกี่ครั้ง เช่น
//สมมุติให้ MyClass มี Attribute ชื่อ myStatic ซึ่งเป็นประเภท static MyClass myObj1 = new MyClass(); MyClass myObj2 = new MyClass(); myObj1.myStatic = 999999; System.out.println(myObj2.myStatic);
จากตัวอย่างนี้อาจจะทำให้เข้าใจนะครับว่า ทั้ง myObj1 และ myObj2 ต่างมี static variable ชื่อ myStatic และเป็น myStatic ตัวเดียวกันใน memory เพราะฉะนั้น Output ของข้อนี้จะเป็น 999999 ซึ่งเป็นค่าของ myStatic นั่นเอง
static method
static method เป็น method ที่มีลักษณะคล้าย static variable คือ การอ้างถึงโดยไม่จำเป็นต้องประกาศ Object หรืออาจจะประกาศ แต่ยังไงก็เป็นตัวเดียวกันอยู่ดี แต่การอ้างถึงระหว่าง method อื่นๆนั้น หากเป็น non-static method หรือ non-static variable ก็จะไม่สามารถเรียกจาก static method ได้ ในทางกลับกัน non-static method จะสามารถเรียก static variable & static method ได้ตามปกติ
class ExampleStatic { private int nonStaticVariable; private static int staticVariable; public static void staticMethod() { nonStaticVariable = 999;// (1) staticVariable = 9999; } public void nonStaticMethod() { nonStaticVariable = 999; staticVariable = 9999; } public static void main(String[] args) { nonStaticVariable = 999;// (2) staticVariable = 9999; nonStaticMethod();// (3) staticMethod(); } }
หาก copy ตัวอย่างนี้ไปวางใน Eclipse ก็จะมีการเตือนตามจุดที่ (1),(2) และ (3) ว่า Cannot make a static reference ......... ซึ่งก็จะเป็นตามที่ได้กล่าวไว้ข้างต้น "non-static method หรือ non-static variable ก็จะไม่สามารถเรียกจาก static method"
เรื่องของ static variable และ static method ก็จะเป็นตามที่ได้เขียนมานะครับ ผมคิดว่าตัวอย่าง ExampleStatic นี่จะทำให้เห็นภาพมากขึ้นทีเดียวแหละ ในส่วนของการนำไปใช้ ลองเลือกให้เหมาะสมนะครับ ^^