1. المتغير النهائي
المتغير النهائي هو ثابت لا يمكن تغييره بمجرد تهيئته.
الفئة test1 {النهائي double pi = 3.14 ؛ // اسم الثابت هو أفضل اختبار عام test1 () {pi = 3.14 ؛ } اختبار void () {system.out.println ("pi is:" + pi) ؛ } public static void main (string [] args) {test1 t = new test1 () ؛ T.Test () ؛ }} الإخراج:
PI هو: 3.14
(1) متغير نهائي فارغ
يسمى المتغير النهائي الذي لم يتم تهيئته في وقت الإعلان المتغير النهائي الفارغ. يجب تهيئة المتغير النهائي الفارغ في المُنشئ ، وإلا سيتم طرح خطأ في التجميع.
الفئة test1 {النهائي مزدوج pi ؛ test1 () {pi = 3.14 ؛ // initialize in the Constructor} void test () {system.out.println ("pi is:" + pi) ؛ } public static void main (string [] args) {test1 t = new test1 () ؛ T.Test () ؛ }} الإخراج:
PI هو: 3.14
(2) المتغير النهائي الثابت غير المؤلف
لا يمكن تهيئة المتغير النهائي الثابت الذي لم يتم تهيئته أثناء مرحلة الإعلان إلا في كتل التعليمات البرمجية الثابتة.
فئة test1 {static نهائي مزدوج pi ؛ ثابت {pi = 3.14 ؛ } اختبار void () {system.out.println ("pi is:" + pi) ؛ } public static void main (string [] args) {test1 t = new test1 () ؛ T.Test () ؛ }} الإخراج:
PI هو: 3.14
2. الطريقة النهائية
لا يمكن كتابة الطريقة النهائية. وهذا يعني أن الفئة الفرعية يمكن أن تسمي طريقة Fianl للفئة الأصل ، ولكن لا يمكنها الكتابة فوقها.
اختبار الفئة {Static Final Double Pi = 3.14 ؛ اختبار void النهائي () {system.out.println ("pi is:" + pi) ؛ }} test test1 يمتد Test {public static void main (string [] args) {test1 t = new test1 () ؛ T.Test () ؛ }} الإخراج:
PI هو: 3.14
3. الفصل النهائي
لا يمكن مورث كالز النهائي
الفئة النهائية test1 {static نهائي مزدوج pi = 3.14 ؛ اختبار void النهائي () {system.out.println ("pi is:" + pi) ؛ } public static void main (string [] args) {test1 t = new test1 () ؛ T.Test () ؛ }} الإخراج:
PI هو: 3.14
ملاحظة: لماذا تم تصميم فئة java.lang.string كنهائي؟
بادئ ذي بدء ، يجب أن تكون واضحًا بشأن الكلمة الرئيسية النهائية.
يبدو أن النهائي لا يريد التغيير ، ولكن هناك سببان لعدم الرغبة في التغيير: التصميم أو الكفاءة. لا يمكن مورث التصنيف المعدل حسب النهائي ، لذلك لا يمكن عبث التصنيف المعدل بواسطة النهائي.
بعد فهم هذا ، دعونا نلقي نظرة على المشكلة:
(1) من منظور التصميم ،
تأكد من أنها لا تغير الدلالات في الفئات الفرعية. فئة السلسلة هي فئة نهائية ، مما يعني أنه لا يُسمح لأحد بتحديد فئة فرعية من السلسلة. بمعنى آخر ، إذا كان هناك مرجع سلسلة ، فيجب أن يشير إلى كائن سلسلة ، ولكن لا يمكن أن يكون كائنًا لفئات أخرى.
لا يمكن تعديل السلسلة بمجرد إنشائها ، لأن مصمم Java سيشارك السلسلة. الفقرة التالية هي تعليق في الكود المصدر:
(2) من منظور الكفاءة:
A. مصمم على النحو النهائي ، لا يحتاج JVM إلى الاستعلام عن الأساليب ذات الصلة في جدول الوظائف الظاهرية ، ولكنه يحدد موقعها مباشرة على الطرق ذات الصلة لفئة السلسلة ، وتحسين كفاءة التنفيذ.
يعتقد مصممو جافا أن المشاركة تجلب المزيد من الكفاءة.
باختصار ، من الضروري التأكد من أن الكائن المشار إليه بواسطة java.lang.String يجب أن يكون كائنًا لـ java.lang.string ، وليس فئة تشير إلى أحفادها ، وذلك لضمان كفاءتها وسلامتها.