ฉันได้อ่านคำถาม Java มือใหม่มาหลายครั้งfinalize()
แล้วและพบว่ามันช่างน่าประหลาดใจที่ไม่มีใครทำให้มันชัดเจนว่า finalize () เป็นวิธีที่ไม่น่าเชื่อถือในการล้างทรัพยากร ฉันเห็นใครบางคนแสดงความคิดเห็นว่าพวกเขาใช้มันเพื่อล้าง Connections ซึ่งน่ากลัวจริงๆเนื่องจากวิธีเดียวที่จะเข้ามาใกล้เคียงกับการรับประกันว่าการเชื่อมต่อถูกปิดคือการใช้ลอง (catch) ในที่สุด
ฉันไม่ได้เรียนใน CS แต่ฉันได้เขียนโปรแกรมใน Java อย่างมืออาชีพมาเกือบทศวรรษแล้วและฉันไม่เคยเห็นใครใช้finalize()
ระบบการผลิตเลย นี่ยังไม่ได้หมายความว่ามันไม่มีประโยชน์หรือคนที่ฉันทำงานด้วยถูกต้องแล้ว
ดังนั้นคำถามของฉันคือกรณีใดบ้างที่มีการใช้งานfinalize()
ที่ไม่สามารถจัดการได้อย่างน่าเชื่อถือมากขึ้นผ่านกระบวนการหรือไวยากรณ์อื่นภายในภาษา
โปรดระบุสถานการณ์ที่เฉพาะเจาะจงหรือประสบการณ์ของคุณเพียงแค่ทำซ้ำตำราเรียนภาษา Java หรือการใช้งานที่ตั้งใจไว้ไม่เพียงพอเนื่องจากไม่ใช่เจตนาของคำถามนี้
finalize()
การประยุกต์ใช้มากที่สุดและรหัสห้องสมุดจะไม่ใช้ อย่างไรก็ตามรหัสไลบรารีแพลตฟอร์มเช่นSocketInputStream
ซึ่งจัดการทรัพยากรดั้งเดิมในนามของผู้เรียกใช้พยายามลดความเสี่ยงของการรั่วไหลของทรัพยากร (หรือใช้กลไกที่เทียบเท่าเช่นPhantomReference
ที่เพิ่มเข้ามาในภายหลัง) ดังนั้นระบบนิเวศต้องการพวกเขา แม้ว่านักพัฒนา 99.9999% จะไม่เคยเขียน