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