วิธีใช้คีย์เวิร์ด static ใน Java
เมื่อทำงานกับคลาสใน Java ปกติคุณต้องสร้างอินสแตนซ์ (instance) ของคลาสก่อน จึงจะเข้าถึงสมาชิก (members) ต่างๆ ได้ แต่บางครั้งคุณอาจต้องการกำหนดสมาชิกของคลาสโดยไม่ต้องสร้างอินสแตนซ์
นี่คือที่มาของ คีย์เวิร์ด static ของ Java ใช้สำหรับกำหนดสมาชิกของคลาสที่เข้าถึงได้ โดยไม่ต้องสร้างอินสแตนซ์ของคลาส
บทช่วยสอนนี้จะอธิบายพื้นฐานของคีย์เวิร์ด static ใน Java และวิธีใช้งานในโปรแกรม Java ของคุณ พร้อมตัวอย่าง
คลาสใน Java
ใน Java คลาสเป็นแม่แบบ (blueprint) ของอ็อบเจ็กต์ เช่น คลาส OrderCoffee อาจรวมฟังก์ชันทั้งหมดเกี่ยวกับการสั่งกาแฟ: วางออเดอร์ เปลี่ยนออเดอร์ เพิ่มรายการในออเดอร์
เราสามารถสร้างอ็อบเจ็กต์ที่เป็นอินสแตนซ์ของคลาสได้ เช่น อ็อบเจ็กต์ CoffeeOrder12 ใช้แม่แบบจากคลาส CoffeeOrder จัดเก็บข้อมูลออเดอร์กาแฟรายตัว อ็อบเจ็กต์นี้เข้าถึงฟังก์ชันและเมธอดทั้งหมดที่ประกาศในคลาส CoffeeOrder ดูภาพประกอบที่ 1

เข้าใจพื้นฐานคลาส Java แล้ว มาสำรวจคีย์เวิร์ด static กัน
Static Methods (เมธอดสแตติก)
Static methods เรียกอีกอย่างว่า class methods คือเมธอดที่เป็นของคลาส ไม่ใช่ของอินสแตนซ์ เนื่องจากเป็นของคลาส จึงเรียกใช้เมธอดได้จากคลาสโดยตรง ไม่ใช่จากอ็อบเจ็กต์ของคลาส
ไวยากรณ์การเรียก static method:
Class.methodName();
มาดูตัวอย่าง: สมมติเราสร้างโปรแกรมจัดการออเดอร์ร้านกาแฟ ต้องการคลาส CoffeeOrder เก็บฟังก์ชันการสั่งกาแฟทั้งหมด
เราต้องการพิมพ์การแจ้งเตือนออเดอร์ใหม่ไปที่คอนโซลของบาริสต้า ต้องการให้การแจ้งเตือนนี้เป็น static เพราะไม่ขึ้นอยู่กับโค้ดอื่นในอ็อบเจ็กต์ออเดอร์ ใช้โค้ดนี้:
class CoffeeOrder {
int createOrder() {
// Code here
int orderNumber = 92;
return orderNumber;
}
static void printOrder(int order) {
System.out.println("Order #" + order + " order has been placed.");
}
}
class Main {
public static void main(String[] args) {
CoffeeOrder order92 = new CoffeeOrder();
int number = order92.createOrder();
System.out.println("Order number: " + number);
CoffeeOrder.printOrder(number);
}
}
ผลลัพธ์:
Order number: 92 Order #92 has been placed.
วิเคราะห์ทีละขั้นตอน: ประกาศคลาส CoffeeOrder มี 2 เมธอด: createOrder() และ printOrder()
createOrder()เป็นเมธอดทั่วไป สร้างออเดอร์และคืนหมายเลขออเดอร์printOrder()เป็น static method พิมพ์ข้อความแจ้งบาริสต้าว่ามีออเดอร์ใหม่
ในโปรแกรมหลัก สร้างอ็อบเจ็กต์ของ CoffeeOrder ชื่อ order92 จัดเก็บข้อมูลออเดอร์ #92 ใช้ createOrder() ได้หมายเลขออเดอร์ พิมพ์ออกมาพร้อม "Order number: "
ตอนเรียก createOrder() ใช้ order92.createOrder() เพราะไม่ใช่ static method จึงเข้าถึงผ่านอ็อบเจ็กต์
แต่ตอนเรียก printOrder() ใช้ CoffeeOrder.printOrder() เพราะเป็น static method ต้องเข้าถึงผ่านชื่อคลาส
หากลองใช้ order92.printOrder() (ผ่านอินสแตนซ์) จะได้คำเตือน (warning)
Static Variables (ตัวแปรสแตติก)
คีย์เวิร์ด static ใน Java ยังใช้สร้าง static instance variables ได้ ตัวแปรสแตติกเป็นของคลาส และถูกเริ่มต้น (initialize) เพียงครั้งเดียว ตอนเริ่มโปรแกรม
ตัวแปรสแตติกไม่ได้เป็นของอ็อบเจ็กต์ หมายความว่าเพื่อเข้าถึง ต้องอ้างอิงผ่านคลาสที่เกี่ยวข้อง ไวยากรณ์宣告 static variable:
static String COFFEE_NAME = "Espresso";
ตัวอย่าง: ประกาศ static variable ชื่อ COFFEE_NAME กำหนดค่า "Espresso"
มาดูตัวอย่างการใช้งาน: สมมติสร้างโปรแกรมประมวลผลออเดอร์ร้านกาแฟ โปรแกรมต้องจัดเก็บจำนวนบาริสต้าที่อยู่เดจ्यूตี และเมื่อสร้างออเดอร์ ต้องเชื่อมโยงออเดอร์กับชื่อบาริสต้าที่จะทำออเดอร์นั้น
class CoffeeOrder {
int baristasOnDuty = 2;
static String name = "Hannah Johnson";
public static void main(String[] args) {
CoffeeOrder order111 = new CoffeeOrder();
System.out.println("Baristas on duty: " + baristasOnDuty);
System.out.println("Assigned barista: " + order111.name);
}
}
ผลลัพธ์:
Baristas on duty: 2 Assigned barista: Hannah Johnson
ในโค้ด ประกาศตัวแปร 2 ตัว:
baristasOnDutyตัวแปรทั่วไป เข้าถึงได้ทั่วคลาสnameตัวแปร static ต้องอ้างอิงผ่านอ็อบเจ็กต์ที่เกี่ยวข้องถึงจะได้ค่า
ใน main สร้างอินสแตนซ์ CoffeeOrder ชื่อ order111 พิมพ์ "Baristas on duty: " ตามด้วยค่า baristasOnDuty เนื่องจากเป็นตัวแปรทั่วไป จึงไม่ต้องอ้างชื่อคลาส
บรรทัดต่อมา พิมพ์ "Assigned barista: " ตามด้วยชื่อบาริสต้า แต่ชื่อเก็บเป็น static variable
ดังนั้น ต้องอ้างอิงชื่ออ็อบเจ็กต์ที่ตัวแปรเกี่ยวข้อง คือ order111.name เพราะ name เป็น static จึงเข้าถึงได้ต่อเมื่ออ้างอิง order111
Static Block (บล็อกสแตติก)
คีย์เวิร์ด static ยังใช้สร้าง static block ได้ หากคลาสมี static variables หลายตัวที่ต้องเริ่มต้นแยกกัน ควรใช้ static block
Static blocks ทำงานเพียงครั้งเดียว — เมื่อคลาสถูกโหลดเข้าหน่วยความจำครั้งแรก ไวยากรณ์ static block ใน Java:
static {
// Code here
}
ตัวอย่าง: สมมติต้องการให้ข้อความ A new order is incoming … พิมพ์ก่อนที่โปรแกรมจะมอบออเดอร์ให้บาริสต้า ให้บาริสต้ารู้ว่าเตรียมตัว ใช้ static block ได้ เพราะ static block จะรันทีแรกเมื่อโปรแกรมทำงาน
class CoffeeOrder {
int baristasOnDuty = 2;
static String name = "Hannah Johnson";
static {
System.out.println("A new order is incoming …");
}
public static void main(String[] args) {
CoffeeOrder order111 = new CoffeeOrder();
System.out.println("Baristas on duty: " + baristasOnDuty);
System.out.println("Assigned barista: " + order111.name);
}
}
ผลลัพธ์:
A new order is incoming … Baristas on duty: 2 Assigned barista: Hannah Johnson
ในโค้ด เริ่มต้น baristasOnDuty และ name ก่อน แล้วโปรแกรมพิมพ์ข้อความจาก static block ก่อน แล้วค่อยรัน main program ให้ผลลัพธ์เหมือนตัวอย่างก่อนหน้า
สรุป
คีย์เวิร์ด static ใน Java มีหลายประโยชน์: สร้าง static methods, static variables, และ static blocks ได้
บทช่วยสอนนี้แนะนำพื้นฐาน static keyword และวิธีใช้กับเมธอด ตัวแปร และบล็อกโค้ด พร้อมตัวอย่าง หลังอ่านจบ คุณพร้อมใช้ Java static keyword อย่างมืออาชีพแล้ว!