ثابت هو كلمة رئيسية أخرى مهمة في جافا. يمكن أن يحسن أداء تشغيل البرنامج وتحسين بنية البرنامج. تطبيقاتها الرئيسية هي كما يلي:
1. متغيرات الأعضاء المعدلة بواسطة ثابت ، تسمى متغيرات الفئة/المتغيرات الثابتة ، لتحقيق مشاركة جميع الكائنات لهذا العضو.
2. يمكن استدعاء طريقة العضو المعدلة بواسطة ثابت ، تسمى طريقة الفئة/طريقة ثابتة ، مباشرة من خلال اسم الفصل دون إنشاء كائن.
3. شكل كتل الرمز الثابت لتحسين أداء البرنامج.
4. حزم الرصاص الثابتة ، بشكل عام استيراد طرق الفئة مباشرة في الفئة الحالية ، بحيث يمكن استدعاء طرق الفصل مباشرة باستخدام اسم الطريقة ، وهو أكثر ملاءمة.
5. قم بتعديل الفصل الداخلي ، واتصل بالفئة الداخلية دون إنشاء فئة خارجية.
وصف الرمز التالي مرفق:
طالب الفصل العام {اسم السلسلة ؛ العمر الثابت السلسلة العامة ToString () {return "الاسم:" + name + "، العمر:" + العمر ؛ } public static void main (string [] args) {student s1 = new student () ؛ s1.name = "Zhang San" ؛ s1.age = 20 ؛ الطالب S2 = طالب جديد () ؛ s2.name = "li si" ؛ S2.age = 10 ؛ System.out.println (S1) ؛ System.out.println (S2) ؛ }}/** اسم النتيجة الاسم: Zhang San ، العمر: 10name: li si ، العمر: 10*/كما ذكر أعلاه ، يتم تخزين الكائنين S1 و S2 في عناوين مختلفة في منطقة الكومة في الذاكرة ، لذلك لن تتداخل مع بعضها البعض. ومع ذلك ، فإن الكلمة الرئيسية الثابتة تعدل عصر متغير العضو ، مما يجعلها الفئة تنتمي إليها بدلاً من أن الكائن ينتمي إليه ، ويمكن مشاركة أي كائن في مثيل تلك الفئة. لذلك ، يتم تعيين جميع الأعمار إلى 10. إذا قمت بإزالة ثابتة ، فمن الواضح أن الكائنات لن تؤثر على بعضها البعض ، والمخرج هو كما يلي:
الاسم: Zhang San ، العمر: 20NAME: LI SI ، العمر: 10
كما ذكر أعلاه ، حدث خطأ عند استدعاء Out1 Out2. من هذا الرمز ، يمكن ملاحظة أن الأساليب الثابتة لا يمكنها استدعاء متغيرات الأعضاء غير القتالية وطرق الأعضاء. يمكن أن تسمي الأساليب غير الاستقليوية متغيرات الأعضاء الثابتة وطرق الأعضاء. لاحظ أن الثابت لا يؤثر على حقوق الوصول للأعضاء. الكلمات الرئيسية التي يمكن أن تؤثر على حقوق الوصول في Java هي الخاصة والعامة والمحمية والتقصير.
يمتد اختبار الفئة العامة الأساسية {static {system.out.println ("كتلة ثابتة ثابتة 1") ؛ } test public () {system.out.println ("Test Constructor") ؛ } public static void main (string [] args) {new test () ؛ }} class base {static {system.out.println ("static static block 2") ؛ } public base () {system.out.println ("Base Constructor") ؛ }}كما ذكر أعلاه ، تذكر جملتين ، يتم تحميل كتلة الكود الثابت مع تحميل الفئة. يتم تحميل الطريقة المتغيرة المعدلة بواسطة ثابت أولاً وبمعرة واحدة فقط من الطرق المتغيرة الأخرى. عند تحميل الفئة الفرعية ، سيتم تحميل الفئة الأصل أولاً. من هذا يمكننا تحليله: في بداية التنفيذ ، يجب علينا أولاً العثور على الطريقة الرئيسية ، لأن الطريقة الرئيسية هي مدخل البرنامج ، ولكن قبل تنفيذ الطريقة الرئيسية ، يجب علينا أولاً تحميل فئة الاختبار. عند تحميل فئة الاختبار ، نجد أن فئة الاختبار ترث من الفئة الأساسية ، لذلك سننتقل لتحميل الفئة الأساسية أولاً. عند تحميل الفئة الأساسية ، نجد أن هناك كتلة ثابتة ، ثم تنفيذ الكتلة الثابتة. بعد تحميل الفئة الأساسية ، تستمر فئة الاختبار في التحميل ، ثم تجد أن هناك كتل ثابتة في فئة الاختبار ، لذلك يتم تنفيذ الكتلة الثابتة. بعد تحميل الفئة المطلوبة ، تبدأ الطريقة الرئيسية في تنفيذها. عند تنفيذ اختبار جديد () بالطريقة الرئيسية ، سيتم استدعاء مُنشئ الفئة الأصل أولاً ، ثم مُنشئه. لذلك ، فإن نتائج العملية هي كما يلي:
كتلة ثابتة ثابتة 2static كتلة ثابتة 1Base منشئ اختبار
/* a.java file*/package com.dogo.test ؛ public class a {public static void word (object o) {system.out.println (o) ؛ }}/*b.java ملف*/استيراد com.dogo.test.a. } /** الإخراج*Hello World! */}كما ذكر أعلاه ، يحتوي A.Java على طريقة ثابتة بسيطة. في B.Java ، نستخدم الكلمة الرئيسية الثابتة لاستيراد الفئة A. لذلك ، ليست هناك حاجة لاستخدام "اسم الفئة. اسم الطريقة" لاستدعاء طريقة الفصل. يمكنك استخدام "اسم الطريقة" مباشرة لاستدعاء طريقة الفصل ، تمامًا مثل طريقة الفئة الخاصة.
/*Euter.java*/public class Outer {static {system.out.println ("Outer Static Block") ؛ } public outer () {system.out.println ("Outer Constructor") ؛ } الفئة الثابتة inner {static {system.out.println ("inner static block") ؛ } public inner () {system.out.println ("Inner Constructor") ؛ }}}/*test.java*/اختبار الفئة العامة {public static void main (string [] args) {new outer.inner () ؛ }}كما ذكر أعلاه ، تذكر تعديل الفئة الداخلية مع ثابت ، يمكن للفئة الخارجية استدعاء الفئة الداخلية مباشرة ، لأنه يتم تحميل التصنيف الداخلي المعدل بواسطة ثابت أثناء تحميل الفئة الخارجية ، حتى تتمكن من استدعاء الفئة الداخلية الثابتة مباشرة دون إنشاء إنشاء فئة خارجية. في المثال ، قبل إدخال الطريقة الرئيسية للاختبار ، قم بتحميل فئة الاختبار ، ثم تنفيذ Outer.inner () جديد ؛ ملاحظة هنا: نظرًا لأن الداخلية ثابتة ، فليس هناك حاجة لتحميل فئات خارجية وطبقة خارجية هنا. يمكن تحميل الداخلية وتثبيتها مباشرة. نتائج التشغيل كما يلي:
مُنشئ داخلي داخلي للكتلة الداخلية
Da Qiao ملاحظة: تطبيق آخر مهم للغاية للستاتيك هو تنفيذ نمط تصميم Singleton. خاصية نمط المصلحة الواحدة هي أن الفئة يمكن أن يكون لها مثيل واحد فقط. من أجل إدراك هذه الوظيفة ، يجب إخفاء مُنشئ الفصل ، أي أن المُنشئ يُعلن أنه خاص ويوفر طريقة لإنشاء كائن. نظرًا لأن المُنشئ يُعلن أنه خاص ، لا يمكن للعالم الخارجي إنشاء كائن من هذا النوع مباشرة ، ويمكنه فقط الحصول على كائن الفئة من خلال الأساليب التي توفرها الفصل. لذلك ، لا يمكن إعلان طريقة إنشاء كائن إلا ثابت. مثال البرنامج على النحو التالي:
Class singledemo {private static singledemo ins = null ؛ خاص singledemo () {} static singlemo getins () {if (ins == null) {ins = new singledemo () ؛ } الإرجاع ؛ }}