في Java، لا يُسمح للمنشئ أن يكون مجردًا أو نهائيًا أو ثابتًا أو أصليًا أو صارمًا. لذلك، ليس هناك ثابت منشئ في جافا .
يعني المُنشئ الثابت المستخدم لتهيئة البيانات الثابتة أن المهمة المحددة سيتم تنفيذها مرة واحدة فقط خلال البرنامج. عادة، يتم استدعاء المُنشئ الثابت تلقائيًا عند إنشاء المثيل الأول، أو عند الإشارة إلى أي عضو ثابت. يتم الإعلان عن المُنشئ الثابت بشكل صريح باستخدام كلمة أساسية ثابتة. ومع ذلك، فإن المنشئ الثابت غير مسموح به في Java.
الأبجدية حسب الرقم
بعض الميزات الرئيسية للمنشئ الثابت هي كما يلي:
- لن يستغرق الأمر معلمات أو معدّلات وصول.
- يمكن أن تحتوي فئة معينة على مُنشئ ثابت واحد فقط.
- لا يسمح بالميراث أو التحميل الزائد.
- يتم استدعاؤه تلقائيًا، ولا يمكن استدعاؤه بشكل مباشر أو صريح.
- إذا لم تتم تهيئة قيمة الحقول الثابتة، فستتم التهيئة إلى القيم الافتراضية.
دعونا نفهم سبب عدم السماح بالمنشئ الثابت في Java:
ماذا لو أعلنا عن منشئ ثابت؟
لا يسمح للمنشئ الثابت بالدخول برمجة جافا . من غير القانوني ومخالف لمعايير Java استخدام مُنشئ ثابت. لذلك، لن يتم تجميع برنامج Java وسيتسبب في حدوث خطأ أثناء الترجمة.
دعونا نفهم ذلك مع مثال. خذ بعين الاعتبار المثال أدناه:
StaticConstructorDemo.java:
تاريخ استخدام جافا
public class StaticConstructorDemo { //Declaring a static constructor public static StaticConstructorDemo() { System.out.println('Static Constructor of the class'); } public static void main(String args[]) { // Creating a constructor object to invoke it StaticConstructorDemo obj = new StaticConstructorDemo(); } }
انتاج:
Exception in thread 'main' java.lang.Error: Unresolved compilation problem: Illegal modifier for the constructor in type StaticConstructorDemo; only public, protected & private are permitted. at StaticConstructorDemo.(StaticConstructorDemo.java:4) at StaticConstructorDemo.main(StaticConstructorDemo.java:13)
من المثال أعلاه، يمكننا أن نرى أنه يتم طرح استثناء ' مُعدِّل غير قانوني لنوع المنشئ '. وهذا مكتوب بوضوح العامة، المحمية ، & خاص مسموح.
لماذا لا تدعم Java المنشئ الثابت؟
عندما نضع علامة على أي شيء بكلمة رئيسية ثابتة، فإنه ينتمي إلى الفئة فقط، على سبيل المثال، الطريقة الثابتة، والمتغير الثابت، وما إلى ذلك. لا يمكن وراثة الطرق الثابتة من فئاتها الفرعية لأنها تنتمي إلى الفئة التي تم الإعلان عنها. وبالمثل، لا يمكننا استخدام متغير ثابت في فئاته الفرعية.
جافا كائن المساواة
في حالة المُنشئ، المُنشئ عبارة عن كتلة من التعليمات البرمجية قابلة لإعادة الاستخدام، مما يعني أنه يمكننا استدعاؤها من فئاتها الفرعية أثناء إنشاء الكائنات. ولكن، عندما نعلنها على أنها ثابتة، لا يمكن استخدامها من قبل فئاتها الفرعية بخلاف الفئات المعلنة. لذلك، من غير القانوني الإعلان عن المُنشئ باعتباره ثابتًا. وبالتالي، فإنه سوف ينتهك الدافع الكامل لمفهوم الميراث.
إذا أعلنا أن المُنشئ ثابت، فلا يمكن الوصول إليه من خلال فئاته الفرعية وسينتمي إلى مستوى الفصل فقط. لن يتم تجميع البرنامج وسيؤدي إلى حدوث خطأ في وقت الترجمة.
دعونا نفهم ذلك بمثال:
StaticConstructorExample.java:
صفيف مقابل قائمة الصفيف
public class StaticConstructorExample { public StaticConstructorExample() { /*Constructor of this class*/ System.out.println('In StaticConstructorExample Class'); } }
StaticConstructorChild.java:
public class StaticConstructorChild extends StaticConstructorExample { public StaticConstructorChild() { System.out.println('In StaticConstructorChild class'); } public void display() { System.out.println('Method of StaticConstructorChild class'); } public static void main(String args[]) { StaticConstructorChild obj = new StaticConstructorChild(); obj.display(); } }
انتاج:
In StaticConstructorExample Class In StaticConstructorChild class Method of StaticConstructorChild class
من المثال أعلاه، يمكننا أن نلاحظ أنه عند إنشاء كائن فئة فرعية، فإنه يستدعي أولاً مُنشئ الفئة الأصل، ثم مُنشئ الفئة الخاصة به. يحدث ذلك لأن الكلمة الأساسية الجديدة تقوم بإنشاء الكائن ثم استدعاء المُنشئ لتهيئة القيم. تحتوي كل فئة فرعية على مُنشئ super() كعبارة أولى لوراثة الخصائص من الفئة الأصلية.
هذا هو السبب وراء عدم قدرتنا على إنشاء مُنشئ ثابت في Java.
خاتمة:
لا يمكن للمنشئات في Java أن تكون ثابتة لأنه إذا تم وضع علامة على المنشئات على أنها ثابتة، فلا يمكن استدعاؤها من الفئة الفرعية؛ وبالتالي، لن يتم إنشاء كائن الفئة التابعة. لن يتم تجميع البرنامج وسيؤدي إلى حدوث خطأ في وقت الترجمة.