1. การดัดแปลงขั้นสุดท้าย
คลาสที่แก้ไขโดยรอบชิงชนะเลิศไม่สามารถสืบทอดได้ดังนั้นวิธีการสมาชิกของคลาสสุดท้ายไม่สามารถเขียนทับได้และคลาสที่แก้ไขโดยคำหลักสุดท้ายไม่มีคลาสย่อยดังนั้นรายละเอียดการใช้งานของคลาสไม่สามารถเปลี่ยนแปลงได้และไม่สามารถขยายได้ วิธีการสมาชิกทั้งหมดในคลาสสุดท้ายจะถูกระบุโดยนัยเป็นวิธีสุดท้ายและตัวแปรสมาชิกในคลาสสุดท้ายสามารถตั้งค่าเป็นขั้นสุดท้ายได้ตามต้องการ
2. วิธีการปรับเปลี่ยนขั้นสุดท้าย
หากวิธีการในคลาสได้รับการแก้ไขโดยคำหลักสุดท้าย subclass ของมันจะไม่สามารถเขียนทับวิธีและสามารถสืบทอดได้โดย subclass เท่านั้น หากวิธีการในคลาสพาเรนต์ไม่ต้องการเขียนทับโดยคลาสย่อยของมันวิธีการสามารถกำหนดเป็นประเภทสุดท้าย นอกจากนี้วิธีการส่วนตัวในคลาสหลัก (เช่นวิธีที่แก้ไขโดยคำหลักส่วนตัว) ไม่ได้รับอนุญาตให้เขียนทับโดยคลาสย่อย ดังนั้นวิธีการที่แก้ไขโดยคำหลักส่วนตัวในคลาสพาเรนต์จึงเป็นค่าเริ่มต้นเป็นประเภทสุดท้าย วิธีการแก้ไขโดยคำหลักสุดท้ายมีคุณสมบัติดังต่อไปนี้:
วิธีนี้ถูกล็อคป้องกันการสืบทอดคลาสใด ๆ จากการปรับเปลี่ยนความหมายและการใช้งาน
มีประสิทธิภาพ. เมื่อคอมไพเลอร์เผชิญหน้ากับวิธีการสุดท้ายมันจะเข้าสู่กลไกการฝังตัวเพื่อปรับปรุงประสิทธิภาพการดำเนินการอย่างมาก
นอกจากนี้วิธีการคงที่ที่ใช้การดัดแปลงขั้นสุดท้ายไม่สามารถซ่อนอยู่ในคลาสย่อยของชั้นเรียนที่พวกเขาอยู่
3. ตัวแปรการปรับเปลี่ยนขั้นสุดท้าย
ความหมายของคำหลักสุดท้ายคือ "นี่ไม่สามารถถูกแทนที่ได้" หรือ "สถานะสุดท้าย";
ทำไมต้องหยุดการเปลี่ยนแปลง?
ผู้ประดิษฐ์ภาษา Java อาจป้องกันการเปลี่ยนแปลงเนื่องจากวัตถุประสงค์สองประการ:
A. ปัญหาประสิทธิภาพ:
วิธีการบางอย่างของคลาสบางคลาสใน JDK ไม่ได้รับอนุญาตให้เขียนทับโดยผู้ใช้ นักออกแบบอาจคิดว่าวิธีการที่ใช้เป็นวิธีที่ดีที่สุด
หากผู้ใช้ครอบคลุมเป็นการส่วนตัวหรือครอบคลุมเนื่องจากความประมาทเลินเล่อมันจะส่งผลกระทบต่อความสามารถของระบบของ JVM หรือระบบ
B. ข้อกำหนดการออกแบบ:
อย่างที่เราทราบกันดีว่าบางกรณีจะต้องใช้คำหลักสุดท้ายเช่นพารามิเตอร์ที่ผ่านคลาสภายในที่ไม่ระบุชื่อในวิธีการ
บางคนบอกว่าตัวแปรสุดท้ายไม่เปลี่ยนรูปหลังจากการมอบหมาย
แล้วการเปลี่ยนแปลงนี้หมายถึงอะไรกันแน่?
ค่าคงที่นี้หมายถึงการอ้างอิงที่อยู่และเนื้อหาของวัตถุที่อ้างอิงยังคงไม่แน่นอน
กล่าวคือตัวแปรสุดท้ายนี้ชี้ไปที่วัตถุเสมอเป็นตัวชี้คงที่ไม่ใช่ตัวชี้ไปยังค่าคงที่
(1) ประเภทข้อมูลพื้นฐานที่แก้ไขโดยคำหลักสุดท้ายไม่สามารถเปลี่ยนแปลงได้เมื่อเริ่มต้น
(2) หากเป็นตัวแปรของประเภทการอ้างอิงก็ไม่สามารถได้รับอนุญาตให้ชี้ไปที่วัตถุอื่นหลังจากเริ่มต้นมัน แต่เนื้อหาของวัตถุที่ชี้ไปที่การอ้างอิงสามารถเปลี่ยนแปลงได้ เหตุผลคือ: ที่อยู่ของวัตถุอ้างอิงที่เก็บไว้ในหน่วยความจำฮีปของชนิดข้อมูลอ้างอิง หลังจากแก้ไขขั้นสุดท้ายประเภทการอ้างอิงพื้นที่หน่วยความจำฮีปชี้ไปที่การอ้างอิง (หรือที่อยู่หน่วยความจำฮีปที่เก็บไว้ในการอ้างอิง) ไม่สามารถเปลี่ยนแปลงได้
เมื่อใช้ขั้นสุดท้ายเพื่อแก้ไขตัวแปรสมาชิกที่ไม่คงที่ของคลาสมีสองวิธีในการเริ่มต้นตัวแปรสมาชิก:
(3) เริ่มต้นในระหว่างการประกาศ (4) เริ่มต้นเมื่อประกาศตัวแปร ตัวแปรเรียกว่าว่างรอบสุดท้ายนั่นคือว่างเปล่าสุดท้าย แต่ค่าเริ่มต้นจะต้องกำหนดให้กับตัวแปรนี้ในตัวสร้างทั้งหมดของคลาสที่ตัวแปรอยู่
เมื่อใช้ขั้นสุดท้ายเพื่อแก้ไขตัวแปรสมาชิกแบบคงที่ของคลาสมีสองวิธีในการเริ่มต้นตัวแปรสมาชิกคงที่:
(5) เริ่มต้นเมื่อประกาศ (6) เริ่มต้นในบล็อกการเริ่มต้นแบบคงที่เมื่อปรับเปลี่ยนตัวแปรคงที่สุดท้ายของอินเตอร์เฟสมีเพียงวิธีเดียวในการเริ่มต้น:
(7) เริ่มต้นเมื่อประกาศ เมื่อใช้ขั้นสุดท้ายเพื่อแก้ไขตัวแปรสมาชิกท้องถิ่นคุณจะต้องตรวจสอบให้แน่ใจว่าการกำหนดค่าเริ่มต้นก่อนการใช้งาน
ในระยะสั้นตัวแปรที่แก้ไขโดยคำหลักสุดท้ายไม่สามารถเริ่มต้นได้เมื่อมีการประกาศ แต่จะต้องทำให้มั่นใจได้ว่าตัวแปรจะเริ่มต้นก่อนการใช้งาน เมื่อเริ่มต้นและได้รับมอบหมายจะไม่สามารถกำหนดใหม่ได้ ลองวิเคราะห์ผลลัพธ์ผลลัพธ์ของโปรแกรม:
การทดสอบคลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {string a = "hello2"; สตริงสุดท้าย b = "สวัสดี"; สตริง d = "สวัสดี"; สตริง c = b + 2; สตริง e = d + 2; System.out.println ((a == c)); System.out.println ((a == e)); - 4. พารามิเตอร์การปรับเปลี่ยนขั้นสุดท้าย
เมื่อพารามิเตอร์วิธีการเป็นประเภทสุดท้ายคุณสามารถอ่านและใช้พารามิเตอร์นี้ แต่คุณไม่สามารถเปลี่ยนค่าของพารามิเตอร์ได้ ตัวแปรนี้ถูกสร้างขึ้นเมื่อมีการเรียกวิธีการและเริ่มต้นกับค่าพารามิเตอร์ที่สอดคล้องกัน ค่าของมันไม่สามารถเปลี่ยนแปลงได้ก่อนที่จะดำเนินการกับวิธีการ ค่าพารามิเตอร์ของประเภทข้อมูลพื้นฐานที่แก้ไขด้วยคำหลักสุดท้ายไม่สามารถเปลี่ยนแปลงได้ ประเภทข้อมูลอ้างอิงที่แก้ไขด้วยคำหลักสุดท้ายไม่สามารถเป็นข้อมูลอ้างอิงที่ชี้ไปยังวัตถุอื่นหรือกำหนดค่าให้เป็นโมฆะอีกครั้ง แต่เนื้อหาของวัตถุอ้างอิงสามารถเปลี่ยนแปลงได้โดยใช้การอ้างอิงนี้ วัตถุประสงค์ของการแก้ไขพารามิเตอร์สุดท้ายคือไม่ป้องกันการทำงานของพารามิเตอร์จากการเปลี่ยนค่าของตัวแปรที่เกี่ยวข้องนอกวิธีการภายในวิธีที่เรียกว่า แต่เพื่อป้องกันการทำงานของพารามิเตอร์ภายในวิธีการที่มีผลต่อค่าเริ่มต้นเมื่อพารามิเตอร์ถูกส่งผ่าน ยิ่งไปกว่านั้นการปรับเปลี่ยนพารามิเตอร์ในวิธีการที่มีคำหลักสุดท้ายไม่สามารถป้องกันเนื้อหาของค่าของพารามิเตอร์ที่ส่งผ่านจากนอกวิธีการเปลี่ยน สำหรับรายละเอียดโปรดดูคำอธิบายของประเภทข้อมูลอ้างอิงการแก้ไขขั้นสุดท้าย