في الأساليب وأعضاء البيانات، ذكرنا أن الكائنات في Java تتم تهيئتها عند إنشائها. أثناء التهيئة، يتم تعيين قيم أولية لأعضاء بيانات الكائن. يمكننا تهيئته بشكل صريح. إذا لم نقم بتعيين قيمة أولية لعضو البيانات، فسيعتمد عضو البيانات قيمة أولية افتراضية بناءً على نوعه.
تتطلب التهيئة الصريحة منا تحديد القيمة الأولية عند كتابة البرنامج، وهو أمر غير مريح في بعض الأحيان. يمكننا استخدام المُنشئ لتهيئة الكائنات. يمكن للمنشئين تهيئة أعضاء البيانات وتحديد عمليات محددة. يتم تنفيذ هذه العمليات تلقائيًا عند إنشاء الكائن.
تعريف المنشئ
المنشئ هو الأسلوب. مثل الطرق العادية، نحدد المنشئين في الفصل. يتمتع المنشئون بالخصائص الأساسية التالية:
1. اسم المنشئ هو نفس اسم الفئة
2. ليس للمنشئ قيمة إرجاع
نحدد منشئ الطبقة البشرية:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); (int h) { this.height = h; System.out.println("لقد ولدت"); ارتفاع كثافة العمليات؛}
سيقوم البرنامج أعلاه بطباعة كود الكود المنسوخ على النحو التالي:
لقد ولدت
160
يمكن للمنشئين تلقي قوائم المعلمات مثل الطرق العادية. هنا، يتلقى المُنشئ Human() عددًا صحيحًا كمعلمة. في نص الطريقة، نقوم بتعيين معلمة عدد صحيح لارتفاع عضو البيانات. يقوم المنشئ بأمرين عند إنشاء الكائن:
يمكن للمنشئين تلقي قوائم المعلمات مثل الطرق العادية. هنا، يتلقى المُنشئ Human() عددًا صحيحًا كمعلمة. في نص الطريقة، نقوم بتعيين معلمة عدد صحيح لارتفاع عضو البيانات. يقوم المُنشئ بأمرين عند إنشاء الكائن:
1. توفير القيمة الأولية لعضو البيانات this.height = h;
2. إجراء عمليات أولية محددة System.out.println("لقد ولدت");
بهذه الطريقة، يمكننا ضبط القيمة الأولية بمرونة عند استدعاء المنشئ دون أن نكون مقيدين مثل التهيئة الصريحة.
كيف يسمى المنشئ؟ عندما نقوم بإنشاء فئات، فإننا جميعا نستخدم الإنسان الجديد (). في الواقع، نحن نسمي منشئ الطبقة البشرية. عندما لا نحدد هذه الطريقة، ستوفر Java مُنشئًا فارغًا ليتم استدعاؤه عند استخدام new. ولكن عندما نحدد مُنشئًا، ستستدعي Java المُنشئ المحدد عند إنشاء كائن. عند الاتصال، نقدم معلمة 160. يمكنك أيضًا أن ترى من نتائج التشغيل النهائية أن ارتفاع الكائن تمت تهيئته بالفعل إلى 160.
أولوية طريقة التهيئة
في الطرق وأعضاء البيانات، يمكننا أن نرى أنه إذا قدمنا قيمة أولية صريحة، فإن عضو البيانات سيأخذ القيمة الأولية الصريحة بدلاً من القيمة الأولية الافتراضية. ولكن إذا قدمنا قيمة أولية صريحة وقمنا بتهيئة نفس عضو البيانات في المنشئ، فسيتم تحديد القيمة الأولية النهائية بواسطة المنشئ. على سبيل المثال المثال التالي:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(160); System.out.println(aPerson.getHeight()); (int h) { this.height = h } /** * accessor */ int getHeight() { return this.height } int height=170;
نتيجة التشغيل هي:
انسخ رمز الكود كما يلي:
160
تتوافق قيمة التهيئة النهائية للكائن مع القيمة الموجودة في طريقة الإنشاء. لذلك:
طرق البناء> المُهيئات الصريحة> المُهيئات الافتراضية
(في الواقع، ما يسمى بالأولوية مرتبط بترتيب التنفيذ أثناء التهيئة، وسوف أتعمق في هذه النقطة لاحقًا)
طريقة التحميل الزائد
يمكن للفئة تعريف أكثر من منشئ واحد، على سبيل المثال:
public class Test{ public static void main(String[] args) { Human neZha = new Human(150, "shit"); System.out.println(neZha.getHeight()) }}class Human{ /** * المُنشئ 1 */ Human(int h) { this.height = h System.out.println("لقد ولدت" } /** * المُنشئ 2 */ Human(int h, String s) { this.height = h; System.out.println("Ne Zha: لقد ولدت،" + s); ;}
نتائج التشغيل:
انسخ رمز الكود كما يلي:
ني تشا: لقد ولدت، يا القرف
150
تم تعريف اثنين من المنشئين أعلاه، كلاهما يدعى Human. لدى المنشئين قوائم معلمات مختلفة.
عند استخدام new لإنشاء كائن، ستقرر Java المُنشئ الذي سيتم إنشاؤه بناءً على المعلمات المتوفرة. على سبيل المثال، عند بناء neZha، نقدم معلمتين: العدد الصحيح 150 والسلسلة "shit"، التي تتوافق مع قائمة المعلمات لطريقة البناء الثانية، لذلك ستستدعي Java طريقة البناء الثانية.
في Java، تحدد Java الطريقة التي سيتم استدعاؤها بناءً على اسم الطريقة وقائمة المعلمات، وهذا ما يسمى التحميل الزائد للطريقة. يمكن تحميل أساليب البناء بشكل زائد، ويمكن أيضًا تحميل الطرق العادية بشكل زائد، مثل طريقة التنفس () أدناه:
public class Test{ public static void main(String[] args) { Human aPerson = new Human(); aPerson.breath(10 }}class Human{ /** * Breath() 1 */ void Breath() {; System.out.println("هو...هو..."); ) { System.out.println("لو...لو...");
نتائج التشغيل:
انسخ رمز الكود كما يلي:
لو...لو...
لو...لو...
لو...لو...
لو...لو...
لو...لو...
لو...لو...
لو...لو...
لو...لو...
لو...لو...
لو...لو...
كما ترون، نظرًا لأنه يتم توفير معلمة أثناء المكالمة: العدد الصحيح 10، يتم استدعاء طريقة التنفس الثانية التي تتطابق قائمة المعلمات معها.
تلخيص
خصائص المنشئ: نفس اسم الفئة، ولا توجد قيمة إرجاع
غرض المنشئ: التهيئة، التحميل الزائد لطريقة التشغيل الأولية: اسم الطريقة + قائمة المعلمات -> الطريقة التي يتم استدعاؤها بالفعل