الكلمات الرئيسية الثابتة جافا والمتغيرات الثابتة Java وطرق ثابتة
يمكن استخدام المعدل الثابت مع المتغيرات وطرق الإشارة إلى أنه "ثابت".
يمكن الوصول إلى المتغيرات الثابتة والأساليب الثابتة من خلال أسماء الفصول الدراسية ، وليس هناك حاجة لإنشاء كائن من فئة للوصول إلى الأعضاء الثابتة في الفصل ، لذلك يسمى الأعضاء المعدلة بواسطة ثابت متغيرات الفئة وطرق الفصل. تختلف المتغيرات الثابتة عن متغيرات المثيل ، ويتم الوصول دائمًا إلى متغيرات المثيل من خلال الكائنات لأن قيمها تختلف بين الكائنات.
يرجى الاطلاع على المثال التالي:
الطبقة العامة التجريبية {static int i = 10 ؛ I) ؛
نتائج التشغيل:
متغير الفئة I = 10 متغير مثيل J = 20
تخصيص الذاكرة الثابتة
تنتمي المتغيرات الثابتة إلى فئات ولا تنتمي إلى أي كائنات مستقلة ، بحيث يمكنك الوصول إلى متغيرات ثابتة دون إنشاء مثيلات من الفصل. هذه النتيجة لأن المترجم يخلق فقط نسخة من المتغيرات الثابتة للفئة بأكملها ، أي فقط تخصيص مساحة ذاكرة واحدة. تختلف متغيرات المثيل.
يرجى الاطلاع على الرمز التالي:
الطبقة العامة {static int i ؛ ؛ obj2 .j = " + obj2.j) ؛}}
نتائج التشغيل:
OBJ1.I = 10 ، OBJ1.J = 20OBJ2.I = 10 ، OBJ2.J = 0
ملاحظة: على الرغم من أنه يمكن أيضًا الوصول إلى المتغيرات الثابتة من خلال الكائنات ، إلا أنها غير موصى بها وسيقوم المترجم أيضًا بتوليد تحذيرات.
في الكود أعلاه ، سيؤثر تغيير قيمة I إلى OBJ2. هذا لأن OBJ1.I و OBJ2.I يشيرون إلى نفس مساحة الذاكرة ، في حين أن OBJ1.J و OBJ2.J يشيرون إلى مسافات ذاكرة مختلفة.
ملاحظة: سيتم تهيئة المتغير الثابت عند تحميل الفصل. وهذا هو ، طالما تم تحميل الفصل ، سيتم تهيئته بغض النظر عما إذا كنت تستخدم هذا المتغير الثابت أم لا.
ملخص: يتم تعديل متغيرات الفئة مع الكلمة الرئيسية ثابتة. ستؤثر التغييرات على المتغيرات على الكائنات الأخرى. هناك طريقتان للوصول إلى الخارج: الوصول من خلال الكائنات أو الوصول من خلال أسماء الفصول.
طريقة ثابتة
الطريقة الثابتة هي طريقة لا يمكنها إجراء عمليات على كائن. على سبيل المثال ، طريقة POW () لفئة الرياضيات هي طريقة ثابتة مع بناء جملة من الرياضيات الكائنات عند استخدامها.
نظرًا لأن الطرق الثابتة لا يمكن تشغيل الكائنات ، فلا يمكن الوصول إلى متغيرات المثيلات بطرق ثابتة ، ويمكنها فقط الوصول إلى متغيرات ثابتة من فئةها الخاصة.
يمكن استخدام الطريقة الثابتة في المواقف التالية:
لا تحتاج الطريقة إلى الوصول إلى حالة الكائن ، ويتم توفير المعلمات المطلوبة بواسطة معلمات واضحة (على سبيل المثال ، Math.pow ()).
تحتاج الطريقة فقط إلى الوصول إلى متغيرات ثابتة للفئة.
يجب أن يكون القراء قد لاحظوا أن Main () هي أيضًا طريقة ثابتة لا تعمل على أي كائنات. في الواقع ، لا توجد كائنات في وقت بدء تشغيل البرنامج ، الطريقة الرئيسية () هي الإدخال إلى البرنامج وسيتم تنفيذها وسيتم إنشاء الكائنات المطلوبة من قبل البرنامج.
ملخص للمتغيرات الثابتة والطرق الساكنة:
يمكن للطريقة الثابتة للفئة ما الوصول إلى متغيرات ثابتة فقط ؛
لا يمكن للطريقة الثابتة للفئة ما استدعاء طرق غير قاسية مباشرة ؛
إذا سمح إذن التحكم في الوصول ، فيمكن أيضًا الوصول إلى المتغيرات الثابتة والطرق الثابتة من خلال الكائنات ، ولكن لا ينصح بها ؛
الكائن الحالي غير موجود في الطريقة الثابتة ، لذلك لا يمكن استخدام هذا ، وبالطبع لا يمكن استخدام Super ؛
لا يمكن الكتابة على الطرق الثابتة بالطرق غير القتالية ؛
لا يسمح المنشئ بإعلان ثابت ؛
لا يمكن تعديل المتغيرات المحلية مع ثابت.
أمثلة على الطرق الثابتة:
Demo Class Demo {static int sum (int x ، int y) {return x + y ؛ "10 + 10 =" + sum) ؛
نتائج التشغيل:
10+10 = 20
لا تتطلب الطريقة الثابتة أي مثيل للفئة التي ينتمي إليها ، لذلك لا توجد قيمة لهذا ولا يمكن الوصول إلى متغير المثيل ، وإلا فإنه سيؤدي إلى خطأ في التجميع.
ملاحظة: لا يمكن الوصول إلى متغيرات المثيل إلا من خلال الكائنات ولا يمكن الوصول إليها من خلال الفئات.
المهيئة الثابتة (كتلة ثابتة)
الكتلة عبارة عن قطعة رمز محاطة بأقواس. التهيئة الثابتة هي كتلة ثابتة موجودة في الفصل وخارج طريقة. يتم تنفيذ المهيئات الثابتة فقط مرة واحدة عند تحميل الفصل (عند استخدام الفئة لأول مرة) وغالبًا ما يتم استخدامها لتهيئة المتغيرات الثابتة.
نموذج الرمز:
الطبقة العامة التجريبية {static int i ؛ " + i) ؛} الفراغ الثابت العام (سلسلة [] args) {system.out.println (" demo.i = " + demo.i) ؛ New Demo (). test () ؛}}
نتيجة العملية هي:
الآن في block.demo.i = 10test الطريقة: i = 10
استيراد ثابت
الاستيراد الثابت هو ميزة جديدة لـ Java 5 ، وتستخدم لاستيراد المتغيرات الثابتة والطرق الثابتة للفئات.
بشكل عام ، نكتب هذا في فصول الاستيراد:
استيراد packagename.classname ؛
أو
استيراد Packagename.*
ويمكن كتابة الاستيراد الثابت مثل هذا:
استيراد packagename.classname.methonname ؛
أو
استيراد packagename.classname.*
بعد الاستيراد ، يمكنك الاتصال مباشرة بالطريقة الثابتة مع اسم الطريقة في الفصل الحالي ، ولم تعد بحاجة إلى استخدام className.MethodName للوصول إليها.
للمتغيرات الثابتة المستخدمة بشكل متكرر والأساليب الثابتة ، يمكن استيرادها بشكل ثابت. تتمثل ميزة الاستيراد الثابتة في تبسيط بعض العمليات ، مثل نظام الإخراج. وفي المرة القادمة مباشرة.
يرجى الاطلاع على الرمز التالي:
استيراد java.lang.system ) ؛
نتائج التشغيل:
رقم عشوائي تم إنشاؤه: 0.05800891549018705
الكلمة الرئيسية النهائية لـ Java: حظر الميراث وتعدد الأشكال <br /> في Java ، عند إعلان الفئات والمتغيرات والأساليب ، يمكن استخدام الكلمة الرئيسية النهائية لتعديلها. تحتوي البيانات المعدلة حسب النهائي على خصائص "الحالة النهائية" وتعني "نهائي". اللوائح المحددة هي كما يلي:
لا يمكن أن يتم مورث التصنيف المعدل حسب النهائي.
لا يمكن إعادة كتابة طريقة التعديل النهائي بواسطة الفئات الفرعية.
يصبح المتغير المعدل بواسطة النهائي (متغير عضو أو متغير محلي) ثابتًا ولا يمكن تعيينه إلا مرة واحدة.
يجب تعيين متغير الأعضاء حسب النهائي في نفس الوقت الذي تم فيه الإعلان. مستخدم.
يمكن للمتغير المحلي المعدل بواسطة النهائي أن يعلن فقط أنه لا يعين ، ثم يتم تعيينه في وقت واحد.
يتم استخدام النهائي بشكل عام لتعديل البيانات التي لا يمكن تغييرها حسب الرغبة لتجنب سوء الاستخدام ، مثل طرق تنفيذ طرق المثلثات الرياضية ، وعمليات الأسعار والوظائف الأخرى ، وكذلك الثابت الرياضي π = 3.141593 ، E = 2.71828 et al.
في الواقع ، لضمان الحالة النهائية ، تم تعريف فئة java.lang.math التي توفر الأساليب والثوابت المذكورة أعلاه على أنها نهائية.
تجدر الإشارة إلى أنه إذا تم تمييز المتغير الذي يشير إلى نوع (نوع أي فئة) على أنه نهائي ، فلا يمكن للمتغير أن يشير إلى أي كائن آخر. ولكن يمكن تغيير محتوى الكائن ، لأن المرجع نفسه هو النهائي فقط.
إذا تم وضع علامة على المتغير النهائي ، فإن النتيجة هي جعلها ثابتة. إن الرغبة في تغيير قيمة المتغير النهائي سيؤدي إلى خطأ في التجميع. فيما يلي مثال على تحديد المتغيرات النهائية بشكل صحيح:
النهائي العام max_array_size = 25 ؛
لا يمكن مورث الثوابت لأن لديهم تعديل نهائي.
يرجى الاطلاع على الرمز التالي:
العروض التوضيحية الفئة النهائية العامة ++ total_number ؛ تنفيذ مهمة ثانوية}}
يمكن أيضًا استخدام النهائي لتعديل الفئات (قبل الكلمة الرئيسية للفصل) لمنع الفئة من الفئات الفرعية. يتم ذلك لأسباب أمنية ، لأنه من الضروري التأكد من أنه بمجرد الرجوع إلى السلسلة ، يجب أن تكون سلسلة من سلسلة الفئة ، وليس سلسلة من فئة أخرى (قد تكون فئة السلسلة موروثة ومتعبئة بها).
يمكن أيضًا تعديل الأساليب حسب النهائي ، ولا يمكن أيضًا تعديل الأساليب التي تم تعديلها بواسطة Final ؛ بمجرد إعلان الفصل على أنه نهائي ، سيتم الإعلان عن الأساليب الواردة في هذا الفصل ضمنيًا على أنها نهائية ، لكن المتغير ليس كذلك.
الطريقة المعدلة حسب النهائي هي الربط الثابت ولن تنتج تعدد الأشكال (الربط الديناميكي). في Java ، سيتم الإعلان عن الأساليب التي يتم تعديلها بواسطة ثابت أو خاص ضمنيًا على أنها نهائية لأن الربط الديناميكي ليس له معنى.
نظرًا لأن الربط الديناميكي يستهلك الموارد وغالبًا ما يكون ضروريًا ، يعتقد بعض المبرمجين أنه ما لم يكن هناك سبب كاف لاستخدام تعدد الأشكال ، ينبغي تعديل جميع الأساليب مع النهائي.
هذا الفهم متطرف بعض الشيء ، لأن المترجم الفوري في JVM يمكنه مراقبة معلومات تشغيل البرنامج في الوقت الفعلي ويمكن أن يعرف بدقة علاقة الميراث بين الفئات. إذا لم يتم كتابة طريقة ما كانت قصيرة وفوق ، فيمكن للمترجم تحسينها ، والتي تسمى الإضافية. على سبيل المثال ، سيتم استبدال مكالمة مضمنة لـ E.GetName () بالوصول إلى متغير E.Name. هذا تحسن ذي معنى ، لأن نقل الفرع المستخدمة من قبل وحدة المعالجة المركزية عند معالجة التعليمات التي تعطل طرق الاتصال سيؤدي إلى تعطيل سياسة التعليمات المسبقة ، لذلك يعتبر هذا غير محظوظ. ومع ذلك ، إذا تم كتابة GetName () في فصل آخر ، فلا يمكن للمترجم معرفة ما الذي سيفعله الرمز المكتوب ، لذلك لا يمكن ضمه.