1. ตัวแปรสุดท้าย
ตัวแปรสุดท้ายคือค่าคงที่ที่ไม่สามารถเปลี่ยนแปลงได้เมื่อเริ่มต้น
คลาส test1 {final double pi = 3.14; // ชื่อของค่าคงที่คือการทดสอบสาธารณะที่ดีที่สุด 1 () {pi = 3.14; } void test () {system.out.println ("pi คือ:" + pi); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {test1 t = test1 ใหม่ (); t.test (); - เอาท์พุท:
pi คือ: 3.14
(1) ตัวแปรสุดท้ายว่างเปล่า
ตัวแปรสุดท้ายที่ไม่ได้เริ่มต้นในเวลาที่ประกาศเรียกว่าตัวแปรสุดท้ายว่างเปล่า ตัวแปรสุดท้ายที่ว่างเปล่าจะต้องเริ่มต้นในตัวสร้างมิฉะนั้นจะมีข้อผิดพลาดในการรวบรวม
คลาส test1 {สุดท้าย double pi; test1 () {pi = 3.14; // เริ่มต้นในตัวสร้าง} การทดสอบโมฆะ () {system.out.println ("pi คือ:" + pi); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {test1 t = test1 ใหม่ (); t.test (); - เอาท์พุท:
pi คือ: 3.14
(2) ตัวแปรสุดท้ายแบบคงที่
ตัวแปรสุดท้ายคงที่ที่ไม่ได้เริ่มต้นในระหว่างขั้นตอนการประกาศสามารถเริ่มต้นได้ในบล็อกรหัสคงที่เท่านั้น
คลาส test1 {คงที่ double pi สุดท้าย; คงที่ {pi = 3.14; } void test () {system.out.println ("pi คือ:" + pi); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {test1 t = test1 ใหม่ (); t.test (); - เอาท์พุท:
pi คือ: 3.14
2. วิธีสุดท้าย
วิธีสุดท้ายไม่สามารถเขียนทับได้ กล่าวคือคลาสย่อยสามารถเรียกวิธีการ fianl ของคลาสแม่ แต่ไม่สามารถเขียนทับได้
การทดสอบชั้นเรียน {คงสุดท้าย double pi = 3.14; การทดสอบโมฆะสุดท้าย () {system.out.println ("pi คือ:" + pi); }} คลาส test1 ขยายการทดสอบ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {test1 t = test1 ใหม่ (); t.test (); - เอาท์พุท:
pi คือ: 3.14
3. ชั้นสุดท้าย
Cals สุดท้ายไม่สามารถสืบทอดได้
คลาสสุดท้าย test1 {คงที่ double pi = 3.14; การทดสอบโมฆะสุดท้าย () {system.out.println ("pi คือ:" + pi); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {test1 t = test1 ใหม่ (); t.test (); - เอาท์พุท:
pi คือ: 3.14
PS: ทำไมคลาส java.lang.string จึงออกแบบเป็นรอบสุดท้าย?
ก่อนอื่นคุณต้องชัดเจนเกี่ยวกับคำหลักสุดท้าย
สุดท้ายดูเหมือนจะไม่ต้องการเปลี่ยนแปลง แต่มีสองเหตุผลที่ไม่ต้องการเปลี่ยนแปลง: การออกแบบหรือประสิทธิภาพ ชั้นเรียนที่แก้ไขโดยรอบชิงชนะเลิศไม่สามารถสืบทอดได้ดังนั้นคลาสที่แก้ไขโดยรอบชิงชนะเลิศจึงไม่สามารถดัดแปลงได้
หลังจากทำความเข้าใจเรื่องนี้มาดูปัญหา:
(1) จากมุมมองการออกแบบ
A. ตรวจสอบให้แน่ใจว่าพวกเขาไม่เปลี่ยนความหมายในคลาสย่อย คลาสสตริงเป็นคลาสสุดท้ายซึ่งหมายความว่าไม่มีใครได้รับอนุญาตให้กำหนดคลาสย่อยของสตริง กล่าวอีกนัยหนึ่งหากมีการอ้างอิงสตริงมันจะต้องอ้างถึงวัตถุสตริง แต่ไม่สามารถเป็นวัตถุของคลาสอื่นได้
B. ไม่สามารถแก้ไขสตริงได้เมื่อสร้างขึ้นเนื่องจากนักออกแบบ Java จะแชร์สตริง ย่อหน้าต่อไปนี้เป็นความคิดเห็นในซอร์สโค้ด:
(2) จากมุมมองของประสิทธิภาพ:
A. ออกแบบเป็นขั้นสุดท้าย JVM ไม่จำเป็นต้องค้นหาวิธีการที่เกี่ยวข้องในตารางฟังก์ชั่นเสมือนจริง แต่ค้นหาโดยตรงในวิธีการที่เกี่ยวข้องของคลาสสตริงเพื่อปรับปรุงประสิทธิภาพการดำเนินการ
B. นักออกแบบ Java เชื่อว่าการแบ่งปันมีประสิทธิภาพมากขึ้น
ในระยะสั้นมีความจำเป็นเพื่อให้แน่ใจว่าวัตถุที่อ้างอิงโดย java.lang.string จะต้องเป็นวัตถุของ java.lang.string ไม่ใช่ชั้นที่อ้างอิงลูกหลานของมันเพื่อให้มั่นใจว่าประสิทธิภาพและความปลอดภัย