- أنواع البنائين
- التحميل الزائد للمنشئ
- هل يقوم المُنشئ بإرجاع أي قيمة؟
- نسخ قيم كائن إلى آخر
- هل يقوم المنشئ بمهام أخرى بدلاً من التهيئة
في جافا ، المُنشئ عبارة عن كتلة من الأكواد المشابهة للطريقة. يتم استدعاؤه عند وجود مثيل لـ فصل أنشئ. في وقت استدعاء المنشئ، يتم تخصيص ذاكرة الكائن في الذاكرة.
إنه نوع خاص من الأساليب يُستخدم لتهيئة الكائن.
في كل مرة يتم إنشاء كائن باستخدام الكلمة الأساسية new()، يتم استدعاء مُنشئ واحد على الأقل.
يستدعي المُنشئ الافتراضي إذا لم يكن هناك مُنشئ متاح في الفصل. في مثل هذه الحالة، يوفر مترجم Java مُنشئًا افتراضيًا بشكل افتراضي.
هناك نوعان من المنشئات في Java: مُنشئ بدون وسيطات ومُنشئ ذو معلمات.
ملحوظة: يطلق عليه اسم المُنشئ لأنه يقوم ببناء القيم في وقت إنشاء الكائن. ليس من الضروري كتابة مُنشئ لفئة ما. ذلك لأن برنامج التحويل البرمجي Java يقوم بإنشاء مُنشئ افتراضي إذا لم يكن لفصلك أيًا منه.
قواعد لإنشاء منشئ جافا
هناك قاعدتان محددتان للمنشئ.
com.sdlc
- يجب أن يكون اسم المنشئ هو نفس اسم الفئة الخاصة به
- يجب ألا يكون للمنشئ نوع إرجاع واضح
- لا يمكن أن يكون منشئ Java مجردًا وثابتًا ونهائيًا ومتزامنًا
ملحوظة: يمكننا استخدام معدّلات الوصول بينما يعلن منشئ. يتحكم في إنشاء الكائن. بمعنى آخر، يمكن أن يكون لدينا مُنشئ خاص أو محمي أو عام أو افتراضي في Java.
أنواع منشئات جافا
هناك نوعان من المنشئات في Java:
- المنشئ الافتراضي (منشئ بدون وسيطة)
- منشئ المعلمة
جافا المنشئ الافتراضي
يُطلق على المنشئ اسم 'المنشئ الافتراضي' عندما لا يحتوي على أي معلمة.
بناء جملة المنشئ الافتراضي:
(){}
مثال على المنشئ الافتراضي
في هذا المثال، نقوم بإنشاء مُنشئ no-arg في فئة Bike. سيتم استدعاؤه في وقت إنشاء الكائن. |
//Java Program to create and call a default constructor class Bike1{ //creating a default constructor Bike1(){System.out.println('Bike is created');} //main method public static void main(String args[]){ //calling a default constructor Bike1 b=new Bike1(); } }اختبره الآن
انتاج:
Bike is created
القاعدة: إذا لم يكن هناك مُنشئ في الفصل الدراسي، فسيقوم المترجم تلقائيًا بإنشاء مُنشئ افتراضي.
س) ما هو الغرض من المنشئ الافتراضي؟
يتم استخدام المنشئ الافتراضي لتوفير القيم الافتراضية للكائن مثل 0، null، وما إلى ذلك، اعتمادًا على النوع.
مثال على المنشئ الافتراضي الذي يعرض القيم الافتراضية
//Let us see another example of default constructor //which displays the default values class Student3{ int id; String name; //method to display the value of id and name void display(){System.out.println(id+' '+name);} public static void main(String args[]){ //creating objects Student3 s1=new Student3(); Student3 s2=new Student3(); //displaying values of the object s1.display(); s2.display(); } }اختبره الآن
انتاج:
0 null 0 null
توضيح: في الفئة المذكورة أعلاه، لا تقوم بإنشاء أي مُنشئ، لذلك يوفر لك المترجم مُنشئًا افتراضيًا. هنا يتم توفير القيم 0 والقيم الخالية بواسطة المنشئ الافتراضي.
جافا منشئ المعلمات
يسمى المُنشئ الذي يحتوي على عدد محدد من المعلمات مُنشئًا ذو معلمات.
لماذا استخدام المنشئ ذو المعلمات؟
يتم استخدام المُنشئ ذي المعلمات لتوفير قيم مختلفة لكائنات مميزة. ومع ذلك، يمكنك توفير نفس القيم أيضًا.
مثال على المنشئ ذو المعلمات
في هذا المثال، قمنا بإنشاء مُنشئ فئة الطالب الذي يحتوي على معلمتين. يمكن أن يكون لدينا أي عدد من المعلمات في المنشئ.
//Java Program to demonstrate the use of the parameterized constructor. class Student4{ int id; String name; //creating a parameterized constructor Student4(int i,String n){ id = i; name = n; } //method to display the values void display(){System.out.println(id+' '+name);} public static void main(String args[]){ //creating objects and passing values Student4 s1 = new Student4(111,'Karan'); Student4 s2 = new Student4(222,'Aryan'); //calling method to display the values of object s1.display(); s2.display(); } }اختبره الآن
انتاج:
111 Karan 222 Aryan
التحميل الزائد للمنشئ في جافا
في Java، المُنشئ يشبه الطريقة تمامًا ولكن بدون نوع الإرجاع. يمكن أيضًا تحميلها بشكل زائد مثل طرق Java.
البناء التحميل الزائد في جافا هي تقنية وجود أكثر من مُنشئ واحد بقوائم معلمات مختلفة. يتم ترتيبها بطريقة يؤدي فيها كل مُنشئ مهمة مختلفة. يتم تمييزها بواسطة المترجم بعدد المعلمات الموجودة في القائمة وأنواعها.
كيفية إغلاق وضع المطور
مثال على التحميل الزائد للمنشئ
//Java program to overload constructors class Student5{ int id; String name; int age; //creating two arg constructor Student5(int i,String n){ id = i; name = n; } //creating three arg constructor Student5(int i,String n,int a){ id = i; name = n; age=a; } void display(){System.out.println(id+' '+name+' '+age);} public static void main(String args[]){ Student5 s1 = new Student5(111,'Karan'); Student5 s2 = new Student5(222,'Aryan',25); s1.display(); s2.display(); } }اختبره الآن
انتاج:
111 Karan 0 222 Aryan 25
الفرق بين المنشئ والطريقة في جافا
هناك العديد من الاختلافات بين المنشئين والأساليب. وترد أدناه.
منشئ جافا | طريقة جافا |
---|---|
يتم استخدام المنشئ لتهيئة حالة الكائن. | يتم استخدام الطريقة لكشف سلوك الكائن. |
يجب ألا يكون للمنشئ نوع إرجاع. | يجب أن تحتوي الطريقة على نوع إرجاع. |
يتم استدعاء المنشئ ضمنيًا. | يتم استدعاء الطريقة بشكل صريح. |
يوفر مترجم Java مُنشئًا افتراضيًا إذا لم يكن لديك أي مُنشئ في الفصل الدراسي. | لم يتم توفير الطريقة من قبل المترجم في أي حال. |
يجب أن يكون اسم المنشئ هو نفس اسم الفئة. | قد يكون أو لا يكون اسم الطريقة هو نفس اسم الفئة. |
جافا نسخة منشئ
لا يوجد مُنشئ نسخ في Java. ومع ذلك، يمكننا نسخ القيم من كائن إلى آخر مثل مُنشئ النسخ في لغة C++.
هناك طرق عديدة لنسخ قيم كائن إلى آخر في Java. هم:
- بواسطة المنشئ
- عن طريق تعيين قيم كائن إلى آخر
- بواسطة طريقة استنساخ () لفئة الكائن
في هذا المثال، سنقوم بنسخ قيم كائن إلى آخر باستخدام مُنشئ Java.
//Java program to initialize the values from one object to another object. class Student6{ int id; String name; //constructor to initialize integer and string Student6(int i,String n){ id = i; name = n; } //constructor to initialize another object Student6(Student6 s){ id = s.id; name =s.name; } void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student6 s1 = new Student6(111,'Karan'); Student6 s2 = new Student6(s1); s1.display(); s2.display(); } }اختبره الآن
انتاج:
111 Karan 111 Karan
نسخ القيم بدون منشئ
يمكننا نسخ قيم كائن إلى آخر عن طريق تعيين قيم الكائنات لكائن آخر. في هذه الحالة، ليست هناك حاجة لإنشاء المنشئ.
class Student7{ int id; String name; Student7(int i,String n){ id = i; name = n; } Student7(){} void display(){System.out.println(id+' '+name);} public static void main(String args[]){ Student7 s1 = new Student7(111,'Karan'); Student7 s2 = new Student7(); s2.id=s1.id; s2.name=s1.name; s1.display(); s2.display(); } }اختبره الآن
انتاج:
111 Karan 111 Karan
س) هل يقوم المنشئ بإرجاع أي قيمة؟
نعم، إنه مثيل الفئة الحالية (لا يمكنك استخدام نوع الإرجاع ولكنه يُرجع قيمة).
هل يمكن للمنشئ أداء مهام أخرى بدلاً من التهيئة؟
نعم، مثل إنشاء الكائن، وبدء سلسلة محادثات، واستدعاء طريقة، وما إلى ذلك. يمكنك إجراء أي عملية في المنشئ أثناء إجرائك في الطريقة.
هل هناك فئة منشئ في جافا؟
نعم.
ما هو الغرض من فئة المنشئ؟
توفر Java فئة مُنشئ يمكن استخدامها للحصول على المعلومات الداخلية للمنشئ في الفصل. تم العثور عليه في الحزمة java.lang.reflect.