คำจำกัดความของตัวแปรอินสแตนซ์และตัวแปรคลาส
เมื่อประกาศตัวแปรสมาชิก ตัวแปรที่แก้ไขด้วยคีย์เวิร์ด static จะเรียกว่าตัวแปรคลาส ตัวแปรคลาสจะเรียกว่าตัวแปรคงที่หรือตัวแปรคงที่ ในขณะที่ตัวแปรที่ไม่ได้รับการแก้ไขด้วยคีย์เวิร์ด static จะเรียกว่าตัวแปรอินสแตนซ์
ตัวอย่างเช่น:
classMain {floatx; // ตัวแปรอินสแตนซ์ staticinty; // ตัวแปรคลาส}
สังเกต:
ต้องวางคีย์เวิร์ด static ก่อนประเภทของตัวแปร
ความแตกต่างระหว่างตัวแปรอินสแตนซ์และตัวแปรคลาส
1. ตัวแปรอินสแตนซ์ของออบเจ็กต์ที่แตกต่างกันจะแตกต่างกัน:
คลาสสามารถสร้างออบเจ็กต์ที่แตกต่างกันได้หลายรายการโดยใช้ตัวดำเนินการใหม่ ออบเจ็กต์เหล่านี้จะได้รับการกำหนดตัวแปรสมาชิกที่แตกต่างกัน ของวัตถุ
2. ออบเจ็กต์ทั้งหมดแชร์ตัวแปรคลาส:
หากมีตัวแปรคลาสในคลาส เมื่อใช้ตัวดำเนินการใหม่เพื่อสร้างวัตถุที่แตกต่างกันหลายตัว ตัวแปรคลาสที่กำหนดให้กับวัตถุเหล่านี้จะใช้หน่วยความจำเดียวกัน การเปลี่ยนตัวแปรคลาสของวัตถุหนึ่งจะส่งผลต่อคลาสของวัตถุอื่น ๆ คือการบอกว่าวัตถุแชร์ตัวแปรคลาส
3. เข้าถึงตัวแปรคลาสโดยตรงผ่านชื่อคลาส:
เมื่อโปรแกรม Java ถูกดำเนินการ ไฟล์ bytecode ของคลาสจะถูกโหลดเข้าสู่หน่วยความจำ หากคลาสไม่ได้สร้างอ็อบเจ็กต์ ตัวแปรอินสแตนซ์ในคลาสจะไม่ได้รับการจัดสรรหน่วยความจำ อย่างไรก็ตาม ตัวแปรคลาสในคลาสจะได้รับการจัดสรรพื้นที่หน่วยความจำที่สอดคล้องกันเมื่อโหลดคลาสลงในหน่วยความจำ หากคลาสนี้สร้างออบเจ็กต์ ตัวแปรอินสแตนซ์ของออบเจ็กต์ที่แตกต่างกันจะแตกต่างกัน กล่าวคือ พื้นที่หน่วยความจำที่แตกต่างกันจะถูกจัดสรร และตัวแปรคลาสจะไม่จัดสรรหน่วยความจำใหม่อีกต่อไป ออบเจ็กต์ทั้งหมดใช้ตัวแปรคลาสร่วมกัน นั่นคือ ตัวแปรคลาสของ อ็อบเจ็กต์ทั้งหมดจะเหมือนกัน พื้นที่หน่วยความจำที่ถูกครอบครองโดยตัวแปรคลาสจะไม่ถูกปล่อยออกมาจนกว่าโปรแกรมจะออก
ดังนั้นตัวแปรคลาสจึงสามารถเข้าถึงได้ไม่เพียงแต่ผ่านออบเจ็กต์เท่านั้น แต่ยังเข้าถึงได้โดยตรงผ่านชื่อคลาสด้วย ในขณะที่ตัวแปรอินสแตนซ์ของออบเจ็กต์สามารถเข้าถึงได้ผ่านออบเจ็กต์ แต่ไม่ได้ใช้ชื่อคลาส