قاعدة المترجم
إذا لم تكتب أي Constructor في Class، يوفر المترجم Default Constructor بلا Parameters. هذا ما سمح باستخدام new Employee() في الأمثلة الأولى.
Default & No-Argument Constructors
إذا لم تكتب أي Constructor في Class، يوفر المترجم Default Constructor بلا Parameters. هذا ما سمح باستخدام new Employee() في الأمثلة الأولى.
إذا كتبت Constructor: عند إضافة Constructor بوسائط، لا يضيف المترجم Default Constructor تلقائيًا. إن أردت أيضًا new Employee() فاكتب Constructor دون وسائط بنفسك.
عبارة الشريحة عن عدم التهيئة لا تعني أن Fields عشوائية. تظل String مساوية null وint مساويًا 0 وdouble مساويًا 0.0 إذا لم تغيّرها. المتغيرات المحلية لها قاعدة مختلفة.
لدينا public Employee() { } مكتوب صراحة، وآخر يستقبل n وa وs. الأول لا يغيّر القيم الافتراضية، والثاني يضع قيم Arguments. لا يلزم إضافة الأول إذا كنت لا تحتاج الإنشاء بلا وسائط.
public class TestClass {
public static void main(String[] args) {
Employee e1 = new Employee();
e1.writeOutput();
Employee e2 = new Employee("Mohamed", 20, 5000);
e2.writeOutput();
}
}public class Employee {
private String name;
private int age;
private double salary;
public Employee() { }
public Employee(String n, int a, double s) {
name = n;
age = a;
salary = s;
}
public void writeOutput() {
System.out.println("Name: " + name + " Age: " + age + " Salary: " + salary);
}
}لا تفترض وجود Employee() بعد كتابة Employee(String, int, double). وجود Constructor بوسائط يلغي الإضافة التلقائية للـDefault Constructor.
قارن new Employee() بإنشاء e2 ذي الوسائط. غيّر اسم e2 ولاحظ أن قيم e1 الافتراضية تظل كما هي.
محاكاة لهذا المثال المحدد، وليست تشغيلًا لكود Java عشوائي.