ฉันเชื่อว่าทุกคนรู้ว่าคำหลักใหม่ของ Java คือการสร้างอินสแตนซ์วัตถุ ถูกต้องนอกจากนี้ยังจัดสรรพื้นที่หน่วยความจำสำหรับวัตถุใหม่
ตัวอย่างเช่นในกรณีเช่น New MyDate (22, 7, 1964) ความสำเร็จของเขาต้องใช้สี่ส่วน:
หนึ่ง. จัดสรรพื้นที่หน่วยความจำสำหรับวัตถุใหม่และเก็บ myDate ไว้ในกอง
สอง. ดำเนินการเริ่มต้นของการแสดงผล
สาม. ดำเนินการสร้าง พารามิเตอร์ตัวยึดในวิธีใหม่จะถูกส่งผ่านไปยังตัวสร้างและค่าวัตถุถูกเผยแพร่
สี่. ตัวแปรนี้ถูกกำหนดให้เป็นข้อมูลอ้างอิงไปยังวัตถุใหม่ในหน่วยความจำฮีป
ในแง่ของ Layman การดำเนินการใหม่ของคุณคือการเพิ่มวัตถุใหม่ในกองหน่วยความจำและเริ่มต้นวัตถุใหม่ผ่านวิธีตัวสร้างและจัดเก็บการอ้างอิงไปยังวัตถุในสแต็ก
ที่นี่ฉันมีกรณีที่เข้าใจง่าย:
สัตว์เลี้ยงระดับสาธารณะ {ถั่วที่ได้รับการป้องกัน be = this.b (); ถั่วสาธารณะ b () {คืนถั่วใหม่ ();}} การทดสอบโมฆะสาธารณะ () {be.setName ("จางซาน");} โมฆะสาธารณะทดสอบ 2 () {system.out.println people (); pe.test (); pe.test2 ();} ชั้นเรียนหลักและชั้นเรียนเด็ก กำหนดค่าให้กับชื่อผ่านการทดสอบ ค่าเอาต์พุตของ Test2 จะพบว่าการทดสอบเอาต์พุตถูกกำหนดให้กับชื่อ เพราะเมื่อเรียกใช้วิธีหลักโปรแกรมจะรวบรวมคลาสแม่ก่อนและสร้างอินสแตนซ์วัตถุ BE ดังนั้นการอ้างอิงในคลาสย่อยจะเป็นวัตถุเดียวกัน แต่ถ้าแก้ไขเป็นรหัสต่อไปนี้:
การทดสอบโมฆะสาธารณะ () {bean be = new bean (); be.setName ("จางซาน");} โมฆะสาธารณะ test2 () {system.out.println (be.getName ());} โมฆะคงที่สาธารณะ ในการทดสอบฉันใหม่เป็นวัตถุและเอาต์พุตเป็นโมฆะเพราะการอ้างอิงที่พวกเขาเก็บไว้ในสแต็กหน่วยความจำนั้นแตกต่างกัน ในกระบวนการเข้ารหัสจริงควรเขียนวัตถุที่มีการอ้างอิงเพิ่มเติมในคลาสหลักสืบทอดคลาสย่อยหรือเขียนลงในโหมดขี้เกียจขวาของ Java:
ชั้นเรียนสาธารณะ Danli1class {// 1 ในการใช้โมเดลผลกำไรเดี่ยวคุณต้องแก้ไขวิธีการก่อสร้าง () ส่วนตัว Danli1class () {} // 2 ขั้นแรกให้อินสแตนซ์อินสแตนซ์ด้วยตัวคุณเอง Danli1class Dan1 = ใหม่ Danli1class (); // 3 เพื่อให้แน่ใจว่าโปรแกรมอื่น ๆ เข้าถึงวัตถุอินสแตนซ์ของอินสแตนซ์ของอินสแตนซ์คุณต้องกำหนดวิธีการคงที่สาธารณะ danli1class danli1 () {return dan1;}} สิ่งนี้จะช่วยประหยัดการใช้หน่วยความจำและเปิดใช้งานวัตถุที่จะนำกลับมาใช้ใหม่ดังนั้นทำไมไม่ทำ