الثلاثاء، 19 نوفمبر 2019

What is constructor in java and why it is used? ماهو المشيد في جافا وماهي استخداماته

What is constructor in java and why it is used?  ماهو المشيد في جافا وماهي استخداماته


What is constructor in java and why it is used?  ماهو المشيد في جافا وماهي استخداماته


في Java ، المُنشئ او المشيد هو كتلة من الأكواد مشابهة للدالة.  يتم استدعاؤه عند إنشاء مثيل للفئة.  في وقت استدعاء المُنشئ او المشيد ، يتم تخصيص ذاكرة الكائن في الذاكرة.

ماهو المثيل والفرق بينه وبين الفئة؟

الفئة هي نسخة زرقاء يعني قالب مخطط لعمل كائن (= مثيل).  الفرق بين الكائن والمثيل هو أن الكائن هو شيء والمثيل هو علاقة.  بمعنى آخر ، يصف المثيل علاقة الكائن بالفئة التي تم تكوين الكائن منها.
مثال فئة الطالب يمكن انشاء عشرات من المثيلات منها مثلا مثيل الطالب احمد ومثيل الطالب علي وهكذا. ولانشاء مثيل يعني كائن object تستخدم المشيدات 

المشيد
 إنه نوع خاص من الدوال المستخدمة لتهيئة الكائن.

ماهي أنواع المشيدات في جافا؟ 

هناك نوعان من المُنشئين في Java: 
  • no-arg constructor مشيد بدون معلمات او وسيطات. 
  • ، مشيد او المنشء ذو المعلمات او الوسيطات.
ماهي أنواع المشيدات في جافا؟

ماهي الوسيطات او المعلمات الباراميتر؟

عبارة عن متغيرات يتم تمريره في الدوال والمشيدات.... أثناء تنفيذ الكتل البرمجية. 

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


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

 يستدعي المُنشئ  المشيد الافتراضي إذا لم يكن هناك مُنشئ  او مشيد متاح في الفئة.  في مثل هذه الحالة ، يوفر مترجم Java مُنشئًا مشيد افتراضيًا..


What are the Rules for creating Java constructor ما هي قواعد إنشاء مُنشئ او مسيد في جافا؟ 

هناك 3 من القواعد المحددة للمنشئ للمشيد

  •  يجب أن يتطابق اسم المُنشئ  او النشيد مع اسم الفئة الخاص به
  •  يجب ألا يكون للمنشئ نوع إرجاع صريح
  •   لا يمكن أن يكون مُنشئ  او نشيد جافا  مجردًا abstract وثابتًا static ونهائيًا final ومتزامنًا synchronized
ملاحظة: يمكننا استخدام محددات الوصول أثناء التصريح عن المُنشئ المشيد. محدد ابوصول يتحكم في إنشاء الكائن.  بمعنى آخر ، يمكن أن يكون لدينا مُنشئ او مشيد خاص أو محمي أو عام أو افتراضي في جافا.


منشئ او مشيد جافا الافتراضي

 يسمى المُنشئ "المُنشئ الافتراضي" عندما لا يحتوي على أي معلمة.

 الصيغة العام لبناء  المُنشئ المشيد الافتراضي في جافا:
<class_name>(){}  
مثال على المُنشئ  المشيد الافتراضي في جافا 
 في هذا المثال ، نقوم بإنشاء مُنشئ مشيد  no-arg  لا يتحوي على وسيطات او معلمات باراميتر في فئة الدراجة.  سيتم استدعاؤه في وقت إنشاء الكائن.

//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
ملاحظة: إذا لم يكن هناك مُنشئ مشيد في فئة ما ، يقوم المترجم تلقائيًا بإنشاء مُنشئ مشيد افتراضي.
What is constructor in java and why it is used?  ماهو المشيد في جافا وماهي استخداماته
س) ما هو الغرض من المُنشئ  المشيد الافتراضي؟
 يتم استخدام المُنشئ الافتراضي لتوفير القيم الافتراضية للكائن مثل 0 ، فارغ ، إلخ ، اعتمادًا على النوع.اي حجز مكان في الذاكرة وهي قيم أولية. حيث يتم استخدام هذا المكان عند استخدام الكائن من قبل المستخدم. 

 مثال على المُنشئ المشيد  الافتراضي الذي يعرض القيم الافتراضية

//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

منشئ او مشيد  التحميل الزائد over loading في جافا

 في جافا ، المُنشئ المشيد مثل الدالة تمامًا ولكن بدون نوع الرجوع.  يمكن أيضًا أن تكون over loading محملة بشكل زائد مثل دالة جافا.

 التحميل الزائد ل over loading لمنشئ او لمشيد في جافا هو دالة  تمتلك أكثر من مُنشئ  او مشيد واحد بقوائم معلمات وسيطات مختلفة.  يتم ترتيبها بطريقة يؤدي بها كل مُنشئ  مشيد مهمة مختلفة.  يتم تمييزها بواسطة المترجم من خلال عدد المعلمات الو سيطات  في القائمة وأنواعها.

 مثال على الحمل الزائد للمنشئ للمشيد في الجافا

//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();
  }
}
مخرجات مثال  الحمل الزائد  overloading في جافا

111 Karan 0
222 Aryan 25

ماهو الفرق بين المنشئ  المشيد ودالة في جافا

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

ماهو الفرق بين المنشئ  المشيد ودالة في جافا

منشئ مشيد نسخة جافا

 لا يوجد مُنشئ مشيد نسخ في جافا.  ومع ذلك ، يمكننا نسخ القيم من كائن إلى آخر مثل مُنشئ مشيد النسخ في C ++.

 توجد طرق عديدة لنسخ قيم كائن إلى آخر في جافا  Java.  هم انهم:
  •  بواسطة المنشئ المشيد
  •  من خلال تخصيص قيم كائن في كائن آخر
  •  بواسطة طريقة clone () لفئة الكائن
 في هذا المثال ، سنقوم بنسخ قيم كائن إلى آخر باستخدام مُنشئ مشيد جافا 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

هل المنشئ المشيد يرجع أي قيمة؟

 نعم ، إنه مثيل الفئة الحالي (رغم انه لا يمكنك استخدام نوع الإرجاع إلا أنه يُرجع قيمة).

 هل يمكن للمنشئ او المشيد تنفيذ مهام أخرى غير التهيئة؟

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

 هل توجد فئة منشئ مشيد في جافا؟

 نعم.

 ما هو الغرض من فئة المُنشئ المشيد؟

 توفر جافا  فئةا لمشيد Constructor التي يمكن استخدامها للحصول على المعلومات الداخلية للمنشئ للمشيد في الفئة.  تم العثور عليها في حزمة java.lang.reflect.

خلاصة سريعة عن المشيدات في الجافا

  •  كل فئة لديها منشئ مشيد سواء كانت فئة عادية أو فئة مجردة.
  •  المنشئون المشيدات ليسوا دوال وليس لديهم أي نوع إرجاع.
  •  يجب أن يتطابق اسم المُنشئ المشيد مع اسم الفئة.
  •  يمكن للمنشئ  للمشيد استخدام أي محدد وصول Access modifier ، ويمكن إعلانه على أنه خاص private أيضًا.  المُنشئ  المشيدالخاص ممكن في جافا ولكن هناك نطاق داخل الفئة فقط.
  •  يمكن أيضًا أن يكون لدالة المُنشئ المشيد مثل نفس الاسم مثل اسم الفئة ، ولكن لا يزال لديهم نوع إرجاع ، على الرغم من أنه يمكننا تحديدها على أنها عمليات وليست منشئات مشيدات.
  •  إذا لم تقم بتنفيذ أي مُنشئ نشيد داخل الفئة ، فسيقوم المترجم بتنفيذ ذلك من أجله.
  •  يجب أن تكون this () و super () هي العبارة الأولى في كود المنشئ المشيد.  إذا لم تذكرها ، فسيقوم المترجم بذلك نيابة عنك وفقًا لذلك.
  •  التحميل الزائد overload للمنشئ  المشيد ممكن ولكن التجاوز غير ممكن.  مما يعني أنه يمكننا تحميل المُنشئ المشيد بشكل زائد في الفئة ولكن لا يمكننا تجاوز المُنشئ المشيد
  •  لا يمكن للمشيد وراثته .
  •  إذا لم يكن لدى فئة Super مُنشئ  المشيد no-arg (افتراضي) ، فلن يقوم المترجم بإدراج مُنشئ افتراضي في فئة فرعية كما هو الحال في السيناريو العادي.
  •  لا تحتوي الواجهات interfaces على  مشيدات مُنشئين.
  •  يمكن أن تحتوي فئة المجردة على مُنشئ  مشيد ويتم استدعاؤها عندما يتم إنشاء مثيل لفئة تنفذ الواجهة.  (أي إنشاء كائن لفئة ملموسة).
  •  يمكن للمُنشئ للمشيد أيضًا استدعاء مُنشئ مشيد آخر من نفس الفئة - باستخدام this ().  إذا كنت تريد استدعاء مُنشئ معلمات وسيطات ، فافعل ذلك على النحو التالي: this (قائمة المعلمات).























التسميات: