ฉันคิดถึงการเขียนคำตอบที่อัปเดตและเชิงลึกที่นี่
final
คำหลักสามารถใช้ได้หลายแห่ง
- ชั้นเรียน
A final class
หมายถึงไม่มีคลาสอื่นที่สามารถขยายคลาสสุดท้ายได้ เมื่อ Java Run Time ( JRE ) รู้ว่าการอ้างอิงวัตถุอยู่ในประเภทของคลาสสุดท้าย (พูด F) ก็รู้ว่าค่าของการอ้างอิงนั้นสามารถอยู่ในประเภทของ F
Ex:
F myF;
myF = new F(); //ok
myF = someOther; //someOther cannot be in type of a child class of F.
//because F cannot be extended.
ดังนั้นเมื่อมันดำเนินการวิธีการของวัตถุที่ใด ๆ วิธีการที่ไม่จำเป็นต้องได้รับการแก้ไขในเวลาทำงานโดยใช้ตารางเสมือน เช่น polymorphism แบบรันไทม์ไม่สามารถใช้ได้ ดังนั้นเวลาที่ใช้ไม่ต้องกังวลกับเรื่องนั้น ซึ่งหมายความว่าจะช่วยประหยัดเวลาในการประมวลผลซึ่งจะปรับปรุงประสิทธิภาพ
- วิธีการ
A final method
ของคลาสใด ๆ หมายความว่าคลาสย่อยใด ๆ ที่ขยายคลาสนั้นไม่สามารถแทนที่เมธอดสุดท้ายได้ ดังนั้นพฤติกรรมเวลาทำงานในสถานการณ์นี้ก็ค่อนข้างเหมือนกันกับพฤติกรรมก่อนหน้านี้ที่ฉันกล่าวถึงในชั้นเรียน
- ฟิลด์ตัวแปรโลคัลพารามิเตอร์เมธอด
หากมีการระบุชนิดใด ๆ ข้างต้นเป็นfinal
หมายความว่าค่านั้นได้รับการสรุปแล้วดังนั้นจึงไม่สามารถเปลี่ยนค่าได้
Ex:
สำหรับฟิลด์พารามิเตอร์ท้องถิ่น
final FinalClass fc = someFC; //need to assign straight away. otherwise compile error.
final FinalClass fc; //compile error, need assignment (initialization inside a constructor Ok, constructor can be called only once)
final FinalClass fc = new FinalClass(); //ok
fc = someOtherFC; //compile error
fc.someMethod(); //no problem
someOtherFC.someMethod(); //no problem
สำหรับพารามิเตอร์วิธีการ
void someMethod(final String s){
s = someOtherString; //compile error
}
นี่หมายความว่าfinal
ไม่สามารถเปลี่ยนค่าของค่าอ้างอิงได้ คืออนุญาตให้เริ่มต้นเดียวเท่านั้น ในสถานการณ์นี้ในเวลาทำงานตั้งแต่JREรู้ว่าค่าไม่สามารถเปลี่ยนแปลงมันโหลดทุกค่าเหล่านี้สรุป (อ้างอิงสุดท้าย) ลงในแคช L1 เพราะมันไม่จำเป็นที่จะโหลดกลับมาอีกครั้งและอีกครั้งจากหน่วยความจำหลัก มิฉะนั้นจะโหลดไปที่แคช L2 และทำการโหลดจากหน่วยความจำหลักเป็นครั้งคราว ดังนั้นจึงเป็นการปรับปรุงประสิทธิภาพ
ดังนั้นใน 3 สถานการณ์ข้างต้นเมื่อเราไม่ได้ระบุfinal
คำหลักในสถานที่ที่เราสามารถใช้ได้เราไม่จำเป็นต้องกังวลการเพิ่มประสิทธิภาพของคอมไพเลอร์จะทำเพื่อเรา นอกจากนี้ยังมีอีกหลายสิ่งที่การเพิ่มประสิทธิภาพของคอมไพเลอร์ทำเพื่อเรา :)