โดยทั่วไปstatic
หมายถึง "เชื่อมโยงกับประเภทตัวเองแทนที่จะเป็นอินสแตนซ์ของประเภท"
นั่นหมายความว่าคุณสามารถอ้างอิงตัวแปรสแตติกได้โดยไม่ต้องสร้างอินสแตนซ์ของประเภทและรหัสใด ๆ ที่อ้างถึงตัวแปรนั้นอ้างอิงถึงข้อมูลเดียวกัน เปรียบเทียบสิ่งนี้กับตัวแปรอินสแตนซ์: ในกรณีนี้มีตัวแปรอิสระหนึ่งเวอร์ชันต่อหนึ่งอินสแตนซ์ของคลาส ตัวอย่างเช่น:
Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);
พิมพ์ออกมา 10: y.instanceVariable
และx.instanceVariable
แยกจากกันเพราะx
และy
อ้างถึงวัตถุต่าง ๆ
คุณสามารถอ้างถึงสมาชิกแบบสแตติกผ่านการอ้างอิงแม้ว่าจะเป็นความคิดที่ดีก็ตาม ถ้าเราทำ:
Test x = new Test();
Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);
ถ้าอย่างนั้นก็จะพิมพ์ออกมา 20 - มีเพียงหนึ่งตัวแปรไม่ใช่หนึ่งต่ออินสแตนซ์ มันจะชัดเจนขึ้นหากเขียนเป็น:
Test x = new Test();
Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);
นั่นทำให้พฤติกรรมมีความชัดเจนมากขึ้น Modern IDEs มักจะแนะนำให้เปลี่ยนรายการที่สองเป็นรายการที่สาม
ไม่มีเหตุผลที่จะมีการประกาศแบบอินไลน์เริ่มต้นค่าเช่นต่อไปนี้เนื่องจากแต่ละอินสแตนซ์จะมีค่าของตัวเองNUMBER
แต่มักจะมีค่าเดียวกันเสมอ (ไม่เปลี่ยนรูปและเริ่มต้นด้วยตัวอักษร) สิ่งนี้เหมือนกับที่จะมีfinal static
ตัวแปรเพียงตัวเดียวสำหรับทุกอินสแตนซ์
private final int NUMBER = 10;
ดังนั้นหากไม่สามารถเปลี่ยนแปลงได้จะไม่มีจุดที่มีหนึ่งสำเนาต่อหนึ่งอินสแตนซ์
แต่มันสมเหตุสมผลถ้าถูกกำหนดค่าเริ่มต้นในตัวสร้างเช่นนี้:
// No initialization when is declared
private final int number;
public MyClass(int n) {
// The variable can be assigned in the constructor, but then
// not modified later.
number = n;
}
ตอนนี้สำหรับอินสแตนซ์ของแต่ละMyClass
เราสามารถมีค่าแตกต่างกัน number
แต่ที่ไม่เปลี่ยนรูปของ