تسلسل المُنشئ في Java مع الأمثلة والتنفيذ

نشرت: 2023-06-05

في Java ، يمكن فهم المُنشئين على أنهم كتل من التعليمات البرمجية المستخدمة لتهيئة الكائنات المنشأة حديثًا. المُنشئ مشابه لطرق المثيل في Java. ومع ذلك ، هناك اختلاف جوهري بين المُنشئين والطرق في Java - في حين أن الأساليب لها نوع إرجاع ، فإن المُنشئين ليس لديهم أي نوع إرجاع محدد. غالبًا ما يشير المبرمجون إلى المُنشئين كنوع خاص من الطرق في Java.

يكون للمُنشئين في Java نفس اسم الفئة ، ويبدون على النحو التالي:

الصف العام myProgram {

// هذا هو المنشئ

برنامجي(){

}

..

}

عندما يتم استدعاء مُنشئ من داخل مُنشئ آخر ، فهذا عندما يحدث تسلسل المُنشئ في Java. ومع ذلك ، قبل أن نتعمق أكثر في تسلسل المُنشئ ، دعونا أولاً نلقي نظرة سريعة على كيفية عمل المُنشئين في Java ، جنبًا إلى جنب مع بعض الأمثلة لترسيخ فهمك.

جدول المحتويات

كيف يعمل المنشئون في Java؟

لفهم كيفية عمل البناة ، دعنا نلقي نظرة على مثال. افترض أن لدينا فئة تسمى myProgram. الآن ، عندما نقوم بإنشاء كائن من هذه الفئة ، سيتعين علينا كتابة العبارة التالية:

myProgram obj = new myProgram ()

كما ترى ، فإن الكلمة الأساسية الجديدة المستخدمة في المثال أعلاه تنشئ كائن myProgram وتستدعي مُنشئًا لتهيئة هذا الكائن الذي تم إنشاؤه حديثًا.

إذا كان هذا يبدو مربكًا بعض الشيء بالنسبة لك ، فلا تقلق. لنلقِ نظرة على برنامج مُنشئ بسيط في Java لفهم عمل المُنشئين في Java بشكل أفضل.

برنامج المنشئ الأساسي بجافا

انظر إلى الجزء التالي من كود Java الذي يستخدم المُنشئون:

اختبار الفصل العام {

كتاب سلسلة

//البناء

امتحان(){

this.book = "A Catcher in the Rye" ؛

}

العامة الثابتة الفراغ الرئيسي (سلسلة [] args) {

هدف الاختبار = اختبار جديد () ؛

System.out.println (obj.book) ؛

}

}

انتاج:

الماسك في الجاودار

في البرنامج أعلاه ، قمنا بإنشاء كائن يسمى "obj" من برنامج الفصل الخاص بنا. بعد ذلك ، قمنا بطباعة اسم متغير المثيل لهذا الكائن الذي تم إنشاؤه حديثًا. كما ترى من الإخراج ، فإن الإخراج هو نفس القيمة التي تم تمريرها إلى "الكتاب" أثناء تهيئة المُنشئ.

ما يوضحه هذا هو أنه في اللحظة التي تم فيها إنشاء كائن الكائن ، تم استدعاء المُنشئ تلقائيًا. هنا ، استخدمنا الكلمة الأساسية "هذا" للإشارة إلى الكائن الحالي. هناك المزيد من الطرق للقيام بذلك أيضًا ، والتي سنتحدث عنها لاحقًا في المقالة أثناء مناقشة Constructor Chaining.

بعد تسوية أساسيات المُنشئ في Java ، دعنا ننتقل إلى Constructor Chaining في Java وكيف يعمل!

تسلسل المنشئين ضمن فئة واحدة

ولكنما هو المنشئ المتسلسل في Java الذي يتضمن فئة واحدة؟استدعاء مُنشئ واحد من مُنشئ آخر في نفس الفئة يتضمن تسلسل المُنشئ داخل تلك الفئة. يتم استخدام الكلمة الأساسية "this" في بناء الجملة لتسلسل المُنشئ داخل نفس الفئة. تتم الإشارة إلى مثيل الفئة الحالي عند استخدام "this". من الأفضل فهم استخدامتسلسل المُنشئ في Java مع المثال .

تسلسل المنشئين من الفئات الأساسية / الأصلية

يمكن اشتقاق فئة في Java من فئة أخرى ؛ يشار إلى الفئة المشتقة على أنها فئة فرعية ، والفئة التي تشتق منها يشار إليها على أنها فئة فائقة. يمكن أن يكون للفئة الفرعية منشئاتها الخاصة وتستدعي تلك الخاصة بفئتها الفائقة.

يستخدم مُنشئ الطبقة الفائقة المصطلح super () ، متبوعًا بالمدخلات المطلوبة. يجب أن تكون الكلمة الأساسية super () موجودة دائمًا في السطر الأول لمنشئ الفئة الفرعية.

اتصل من مُنشئ مختلف ، منشئ

باستخدام هذه الكلمة الأساسية () ، يمكن للمُنشئ في Java استدعاء مُنشئ آخر من نفس الفئة. يجب أن تكون الكلمة الأساسية الأولى في المُنشئ دائمًا هذه الكلمة الأساسية () ، والتي يمكن استخدامها فقط لاستدعاء مُنشئ آخر من نفس النوع.

منشئ الهاتف Superclass

تسمح الكلمة الأساسية super () في Java لمنشئي الفئة الفرعية باستدعاء مُنشئ الطبقة الفائقة. يجب أن تكون الكلمة الأساسية super () ، والتي لا يمكن استخدامها إلا لاستدعاء مُنشئ الفئة الفرعية superclass ، هي السطر الأول من مُنشئ الفئة الفرعية.

قد تتصرف برامج Java بشكل مختلف إذا تم ترتيب المنشئات في تسلسل مختلف. إذا احتوى الفصل على العديد من المُنشئين واستخدم أحدهم الكلمة الأساسية () هذه لاستدعاء مُنشئ آخر ، فإن تغيير ترتيب المُنشئين يمكن أن يغير كيفية تصرف البرنامج.

طريقة مختلفة لسلسلة المنشئين باستخدام الكتلة الأولية

يعد استخدام كتلة التهيئة طريقة أخرى لتسلسل المُنشئ في Java .يتم تشغيل قسم من التعليمات البرمجية يُعرف باسم كتلة التهيئة

أساسيات تسلسل المُنشئ في Java

عندما نستدعي مُنشئًا من مُنشئ آخر من نفس الفئة ، فإن ما يحدث يُعرف باسم Constructor Chaining. الغرض الأساسي من تنفيذ Constructor Chaining هو تمرير المعلمات من خلال مجموعة من المنشئات المختلفة وتهيئتها فقط في مكان واحد. بهذه الطريقة ، تحصل على فرصة للحفاظ على جميع عمليات التهيئة الخاصة بك في مكان واحد بينما يمكن توفير منشئات مختلفة للمستخدمين.

إذا لم تقم بتنفيذ تسلسل المُنشئ وكان هناك مُنشئان مختلفان يتطلبان معلمة واحدة ، فستحتاج إلى تهيئة هذا المعامل مرتين. بالإضافة إلى ذلك ، في كل مرة تتغير فيها التهيئة ، ستحتاج إلى إجراء تغييرات ذات صلة على جميع المنشئات بدلاً من واحدة فقط.

كقاعدة عامة ، يجب عليك دائمًا استدعاء المُنشئين مع المزيد من الحجج من المُنشئين الذين لديهم وسيطات أقل. يجب أن تدرك أيضًا أنه يمكننا زيادة التحميل على العديد من المنشئين في الفصل. ومع ذلك ، في الوقت الذي يتم فيه إنشاء كائن ، يتم استدعاء مُنشئ واحد فقط. يمكن أن يكون هناك عدد غير قليل من المواقف أثناء البرمجة في Java حيث ستحتاج إلى استدعاء مُنشئين متعددين من بعضهم البعض دون إنشاء كائنات مختلفة. تُعرف آلية استدعاء مُنشئ واحد من مُنشئ آخر وعندما يستدعي المُنشئ المتضمن مُنشئًا آخر باسم تسلسل المُنشئ.

تعلمدورات البرمجياتعبر الإنترنت من أفضل الجامعات في العالم.اربح برامج PG التنفيذية أو برامج الشهادات المتقدمة أو برامج الماجستير لتتبع حياتك المهنية بشكل سريع.

هناك شيئان أساسيان يجب أن تضعهما في اعتبارك فيما يتعلق بتسلسل المُنشئ لضمان أقصى درجات الوضوح:

  • الغرض الأساسي من Constructor Chaining هو الحفاظ على الكود. الفكرة هي مساعدتك في كتابة جزء واحد فقط من التعليمات البرمجية التي يمكن إعادة استخدامها عبر برنامجك. بهذه الطريقة ، لن يكون الرمز الخاص بك نظيفًا وقابلًا للقراءة فحسب ، بل سيكون أيضًا أسهل بكثير في إدارته مع حدوث جميع التصحيحات والتغييرات في مكان واحد فقط بدلاً من جميع المنشئين.
  • لا يقوم المُنشئ الذي تم استدعاؤه بإنشاء كائن منفصل. بدلاً من ذلك ، يستخدم الكائن قيد التشغيل حاليًا لاستدعاء مُنشئ آخر. يشبه الأمر تمامًا استدعاء طريقة مختلفة داخل المُنشئ ، باستثناء أنه مُنشئ أيضًا.

كما رأيت في المثال السابق ، استخدمنا هذه الكلمة الأساسية للوصول إلى معلمات المُنشئ. وبالمثل ، يتطلب تسلسل المنشئ أيضًا كلمتين رئيسيتين أساسيتين. فيما يلي هاتان الكلمتان الرئيسيتان:

  • هذا - يستدعي تمثيل الطريقة الخاص به مُنشئ الفئة الحالي.
  • super - يستدعي تمثيل الأسلوب الخاص به مُنشئًا فائقًا أو مُنشئًا أصليًا.

بالإضافة إلى ذلك ، يجب أن تكون على دراية ببعض المصطلحات والتعريفات المهمة الأخرى من حيث تسلسل المُنشئ في Java:

  • استدعاء المُنشئ: عندما تقوم باستدعاء المُنشئ ، ويتم استدعاء المُنشئ بنجاح ، يُعرف باسم استدعاء المُنشئ.
  • تنفيذ المُنشئ: في حالة استدعاء المُنشئ ، يبدأ التحكم في تنفيذ العبارات في جسم المُنشئ. يُعرف باسم تنفيذ المنشئ.

القواعد الأساسية لتسلسل المُنشئ في Java

بعد تثبيت أساسيات Constructor Chaining ، دعنا نلقي نظرة على بعض القواعد الأساسية للعمل مع Constructor Chaining في Java:

  • هذا () يمكنه فقط استدعاء المعلمات التي تنتمي إلى نفس المُنشئ.
  • super () يمكنه فقط استدعاء مُنشئ الطبقة الفائقة الفوري.
  • يجب أن يكون this () و super () أول بيان في المُنشئ.
  • لا يمكن استخدام هذا () و super () داخل المُنشئ نفسه نظرًا لأن كلا الشخصين يجب أن يكونا عبارات أولية ، وهو أمر غير ممكن عمليًا.
  • لا يمكنك إضافة هذا () في جميع المنشئين من نفس الفئة ، حيث يجب أن يكون هناك مُنشئ واحد على الأقل بدون هذه العبارة ().
  • يتم استدعاء وتنفيذ المُنشئين في Java بشكل معاكس. لذلك ، إذا تم استدعاء المنشئين بالترتيب A ، B ، C ، فسيكون التنفيذ بالترتيب C ، B ، A.

على سبيل المثال ، لدينا هنا فئتان منفصلتان تعملان عن طريق زيادة التحميل على المنشئين المختلفين. نريد تنفيذ المنشئات بترتيب 2 ، 1 ، 4 ، 3 ، 5.

لتنفيذ المُنشئين بالترتيب ، نحتاج إلى استدعاء المُنشئين تمامًا بترتيب معاكس مثل 5 ، 3 ، 4 ، 1 ، 2 ، انظر في المثال أدناه.

فئة الوالد

{

الوالد () // 1

{

هذا ("مرحبًا") ؛

System.out.println ("في Parent 0 arg constructor 1") ؛

}

الأصل (سلسلة الرسائل) // 2

{

System.out.println ("في المُنشئ الرئيسي (سلسلة) 2") ؛

}

}

منشئ الصف يوسع الأصل

{

منشئ () // 3

{

هذا (10) ؛ // استدعاء مُنشئ رقم 5

System.out.println ("في Constructor 0 arg constructor 3") ؛

}

المُنشئ (سلسلة الرسائل) // 4

{

super () ؛ // استدعاء مُنشئ فئة أصل رقم واحد

System.out.println ("في المُنشئ (String msg) arg constructor 4") ؛

}

المُنشئ (int i) // 5

{

this ("hello") ؛ // استدعاء مُنشئ رقم 4

System.out.println ("في المُنشئ (int i) المُنشئ 5") ؛

}

// طريقة () الرئيسية

الرئيسية العامة الثابتة الفراغ (سلسلة [] args)

{

المُنشئ cobj = مُنشئ جديد () ؛ // استدعاء 3 رقم المنشئ

}

}

انتاج:

في المنشئ الأصل (سلسلة) 2

في المُنشئ الرئيسي 0 الوسيط 1

في المُنشئ (String msg) arg constructor 4

في منشئ (int i) منشئ 5

في منشئ 0 مُنشئ 3

تلخيص جميع مفاهيم المُنشئين وسلسلة المُنشئ في Java بمثال أخير واحد:

فئة Emp

{

السلسلة العامة EName ؛

الأرباح العامة العالمية ؛

عنوان سلسلة عام ؛

إمب عام ()

{

هذا ("راهول") ؛

}

امب عام (اسم السلسلة)

{

هذا (الاسم ، 140035) ؛

}

إمب عام (اسم السلسلة ، int sal)

{

هذا (الاسم ، سال ، "نيودلهي") ؛

}

الموظف العام (اسم السلسلة ، int sal ، إضافة سلسلة)

{

this.EName = name؛

this.EEarnings = sal؛

this.address = add؛

}

عرض باطل () {

System.out.println (“الاسم:“ + EName)؛

System.out.println ("الراتب" + الأرباح) ؛

System.out.println (“العنوان:” + العنوان)؛

}

الرئيسية العامة الثابتة الفراغ (سلسلة [] args)

{

هدف الموظف = موظف جديد () ؛

obj.disp () ،

}

}

انتاج:

اسم الموظف: راهول

راتب الموظف: 140035

عنوان الموظف: نيودلهي

خاتمة

بذلك نصل إلى نهاية هذا المقال. نأمل أن يكون هذا قد أوضح شكوكك بشأن تسلسل المُنشئ في Java وعزز فهمك أكثر. في upGrad ، نؤمن بمساعدة الطلاب من جميع أنحاء العالم للوصول إلى إمكاناتهم الكاملة والنجاح في حياتهم المهنية. تم تصميم دوراتنا مع الأخذ في الاعتبار كلاً من المبتدئين والمهنيين ذوي الخبرة.

إحدى هذه الدورات هي شهادة PG المرتبطة بالوظيفة من upGrad في هندسة البرمجيات ، المصممة خصيصًا للباحثين عن عمل لأول مرة. تحقق من محتوى الدورة وسجّل نفسك اليوم! تعلم جميع مهارات هندسة البرمجيات ذات الصلة مثل Java و DSA و OODAP و JavaScript و MERN و AWS وما إلى ذلك ، من خبراء الصناعة والمهنيين الرائدين.

س: هل من الممكن ربط أكثر من مُنشئين في Java؟

تسمح Java بحد أقصى اثنين من سلاسل المُنشئ. يمكنك إنشاء كائنات أكثر تعقيدًا وتقليل تكرار الكود عن طريق القيام بذلك.

س: عندما يقوم المُنشئ في Java باستدعاء نفسه ، ماذا يحدث؟

سينتج عن المُنشئ في Java الذي يستدعي نفسه خطأ تجاوز سعة مكدس وحلقة غير محددة.

س: كيف يبدو المُنشئ الافتراضي في Java؟

المُنشئ الافتراضي في Java هو الذي لا يقبل أي مدخلات. إذا لم يكن هناك مُنشئ مُعلن في الفصل ، فسيتم إنتاج واحد تلقائيًا.