يقوم مُنشئ Java بإنشاء مثيل جديد لكائن محدد بالفعل. تتناول هذه المقالة كيفية استخدام أساليب مُنشئ Java لإنشاء كائن شخص.
ملحوظة: تحتاج إلى إنشاء ملفين في نفس المجلد لهذا المثال: Person.java يحدد فئة الشخص ، و PersonExample.java يحتوي على الطريقة الرئيسية الذي يخلق كائنات الشخص.
طريقة المنشئ
لنبدأ بإنشاء فئة شخص تحتوي على أربعة حقول خاصة: firstName و lastName والعنوان واسم المستخدم. هذه الحقول هي متغيرات خاصة وتشكل قيمها معًا حالة كائن. لقد أضفنا أيضًا أبسط طرق الإنشاء:
شخص من الطبقة العامة
سلسلة الاسم الأول الخاصة ؛
سلسلة اسم العائلة الخاصة ؛
عنوان السلسلة الخاص
اسم مستخدم السلسلة الخاص ؛
// طريقة المنشئ
شخص عام ()
{
}
}
تشبه طريقة المنشئ أي طريقة عامة أخرى إلا أنها تشترك في نفس اسم الفئة ، ولا يمكنها إرجاع قيمة. يمكن أن تحتوي على لا شيء أو معلمة واحدة أو أكثر.
حاليًا ، لا تؤدي طريقة المنشئ لدينا أي شيء على الإطلاق ، وقد حان الوقت للنظر في معنى هذا بالنسبة للحالة الأولية لكائن الشخص. إذا تركنا الأشياء كما هي أو لم ندرج طريقة منشئ في فئة الشخص لدينا (في جافا يمكنك تحديد فصل بدون فصل) ، ثم لن يكون للحقول أي قيم - ونريد بالتأكيد أن يكون لشخصنا اسم وعنوان بالإضافة إلى خصائص أخرى. إذا كنت تعتقد أن هناك احتمالًا بعدم استخدام كائنك بالشكل المتوقع كما قد لا تتم تهيئة الحقول عند إنشاء الكائن ، فقم دائمًا بتعريفها بقيمة افتراضية:
شخص من الطبقة العامة
سلسلة خاصة firstName = ""؛
سلسلة خاصة lastName = ""؛
عنوان السلسلة الخاص = ""؛
اسم مستخدم السلسلة الخاص = ""؛
// طريقة المنشئ
شخص عام ()
{
}
}
عادة ، للتأكد من أن طريقة المنشئ مفيدة ، سنقوم بتصميمها لتوقع المعلمات. يمكن استخدام القيم التي تم تمريرها عبر هذه المعلمات لتعيين قيم الحقول الخاصة:
شخص من الطبقة العامة
سلسلة الاسم الأول الخاصة ؛
سلسلة اسم العائلة الخاصة ؛
عنوان السلسلة الخاص
اسم مستخدم السلسلة الخاص ؛
// طريقة المنشئ
شخص عام (سلسلة شخصالاسم الأول ، سلسلة شخصالاسم الأول ، سلسلة شخصعنوان ، سلسلة شخصاسم المستخدم)
{
الاسم الأول = personFirstName ؛
اسم العائلة = personLastName ؛
العنوان = personAddress ؛
اسم المستخدم = personUsername؛
}
// طريقة لعرض حالة الكائن على الشاشة
عرض الفراغ العام PersonDetails ()
{
System.out.println ("Name:" + firstName + "" + lastName) ؛
System.out.println ("العنوان:" + العنوان) ؛
System.out.println ("اسم المستخدم:" + اسم المستخدم) ؛
}
}
تتوقع طريقة المنشئ لدينا الآن تمرير قيم أربعة سلاسل إليها. ثم يتم استخدامها لتعيين الحالة الأولية للكائن. لقد أضفنا أيضًا طريقة جديدة تسمى displayPersonDetails () لتمكيننا من رؤية حالة الكائن بعد إنشائه.
استدعاء طريقة المنشئ
على عكس الأساليب الأخرى لكائن ما ، يجب استدعاء طريقة المُنشئ باستخدام الكلمة الأساسية "الجديدة":
الفئة العامة PersonExample {
public static void main (String [] args) {
Person dave = new Person ("Dave"، "Davidson"، "12 Main St."، "DDavidson")؛
dave.displayPersonDetails () ؛
}
}
إليك ما فعلناه:
- لإنشاء مثيل جديد لكائن الشخص ، نحدد أولاً متغير النوع الشخص الذي سيحتوي الكائن. في هذا المثال ، أطلقنا عليه ديف.
- على الجانب الآخر من علامة التساوي ، نسمي طريقة المُنشئ لفئة الشخص الخاصة بنا ونمررها بأربعة قيم سلسلة. ستتخذ طريقة المُنشئ الخاصة بنا تلك القيم الأربع وتعيين الحالة الأولية لكائن الشخص لتكون: firstName = "Dave"، lastName = "Davidson"، address = "12 Main St"، اسم المستخدم = "DDavidson".
لاحظ كيف تحولنا إلى فئة Java الرئيسية لاستدعاء كائن الشخص. عند العمل مع الكائنات ، سوف تمتد البرامج ملفات جافا متعددة. تأكد من حفظها في نفس المجلد. لتجميع البرنامج وتشغيله ، ما عليك سوى تجميع وتشغيل Java الفئة الرئيسية ملف (على سبيل المثال ، PersonExample.java). برنامج التحويل البرمجي لـ Java ذكي بما يكفي لإدراك أنك تريد ترجمة Person.java الملف أيضًا لأنه يمكن أن يرى أنك استخدمته في الفئة PersonExample.
تسمية المعلمات
يتم خلط برنامج التحويل البرمجي لـ Java إذا كانت معلمات طريقة المنشئ لها نفس أسماء الحقول الخاصة. في هذا المثال ، يمكنك أن ترى أننا تميزنا عن طريق بادئة المعلمات بكلمة "شخص". تجدر الإشارة إلى أن هناك طريقة أخرى. يمكننا استخدام الكلمة الأساسية "هذا" بدلاً من ذلك:
// طريقة المنشئ
شخص عام (اسم السلسلة الأول ، سلسلة اسم العائلة ، عنوان السلسلة ، اسم مستخدم السلسلة)
{
this.firstName = firstName؛
this.lastName = lastName ؛
this.address = العنوان ؛
this.username = اسم المستخدم ؛
}
تخبر الكلمة الأساسية "هذا" برنامج التحويل البرمجي لـ Java أن المتغير الذي سيتم تعيين القيمة له هو المحدد بواسطة الفئة ، وليس المعلمة. إنها مسألة أسلوب البرمجة ، لكن هذه الطريقة تساعدنا في تحديد معلمات المُنشئ دون الحاجة إلى استخدام أسماء متعددة.
أكثر من طريقة واحدة منشئ
عند تصميم فئات الكائنات الخاصة بك ، فلن تقتصر على استخدام طريقة مُنشئ واحدة فقط. قد تقرر أن هناك عدة طرق لتهيئة الكائن. القيد الوحيد على استخدام أكثر من طريقة منشئ هو أن المعلمات يجب أن تختلف.
تخيل أنه في الوقت الذي ننشئ فيه كائن الشخص ، قد لا نعرف اسم المستخدم. دعنا نضيف طريقة منشئ جديدة تحدد حالة كائن الشخص فقط باستخدام الاسم الأول واسم العائلة والعنوان:
شخص من الطبقة العامة
سلسلة الاسم الأول الخاصة ؛
سلسلة اسم العائلة الخاصة ؛
عنوان السلسلة الخاص
اسم مستخدم السلسلة الخاص ؛
// طريقة المنشئ
شخص عام (اسم السلسلة الأول ، سلسلة اسم العائلة ، عنوان السلسلة ، اسم مستخدم السلسلة)
{
this.firstName = firstName؛
this.lastName = lastName ؛
this.address = العنوان ؛
this.username = اسم المستخدم ؛
}
// طريقة البناء الجديد
شخص عام (اسم السلسلة الأول ، سلسلة اسم العائلة ، عنوان السلسلة)
{
this.firstName = firstName؛
this.lastName = lastName ؛
this.address = العنوان ؛
this.username = "" ؛
}
// طريقة لعرض حالة الكائن على الشاشة
عرض الفراغ العام PersonDetails ()
{
System.out.println ("Name:" + firstName + "" + lastName) ؛
System.out.println ("العنوان:" + العنوان) ؛
System.out.println ("اسم المستخدم:" + اسم المستخدم) ؛
}
}
لاحظ أن طريقة المُنشئ الثاني تُسمى أيضًا "الشخص" كما أنها لا تُرجع قيمة. الفرق الوحيد بينها وبين طريقة المنشئ الأول هو المعلمات - هذه المرة تتوقع فقط ثلاثة قيم السلسلة: الاسم الأول واسم العائلة والعنوان.
يمكننا الآن إنشاء كائنات شخصية بطريقتين مختلفتين:
الفئة العامة PersonExample {
public static void main (String [] args) {
Person dave = new Person ("Dave"، "Davidson"، "12 Main St."، "DDavidson")؛
Person jim = new Person ("Jim"، "Davidson"، "15 Kings Road")؛
dave.displayPersonDetails () ؛
jim.displayPersonDetails () ؛
}
}
شخص ديف سيتم إنشاؤه باستخدام الاسم الأول واسم العائلة والعنوان واسم المستخدم. شخص جيم ، ومع ذلك ، لن تحصل على اسم مستخدم ، أي أن اسم المستخدم سيكون السلسلة الفارغة: username = "".
خلاصة سريعة
يتم استدعاء أساليب المُنشئ فقط عند إنشاء مثيل جديد لكائن. هم:
- يجب أن يكون له نفس اسم الفصل
- لا ترجع قيمة
- يمكن أن يكون لا شيء ، واحد ، أو العديد من المعلمات
- يمكن ترقيم أكثر من واحد طالما أن كل طريقة منشئ يحتوي على مجموعة مختلفة من المعلمات
- قد يمتلك أسماء المعلمات نفس الحقول الخاصة طالما تم استخدام الكلمة الأساسية "this"
- تسمى باستخدام الكلمة الرئيسية "الجديدة"