Constructor ها یا سازنده ها در جاوا ویژگی هستند که با استفاده از آنها می توان متغییر های یک کلاس را در هنگام ایجاد نمونه از آن را مقدار دهی کرد یا مقداری را به کلاس دیگر ارسال کرد که این پارامتر ارسالی می تواند آبجکت ایجاد شده از یک کلاس باشد.
هر کلاسی در جاوا می تواند n کانستراکتور داشته باشد.
اگر برای کلاسی کانستراکتور تعیین نشود در هنگام ایجاد نمونه از آن کلاس به صورت خودکار یک کانستراکتور پیش فرض برای آن ایجاد خواهد شد.
نمونه ایی از یک کلاس ساده با یک سازنده پیش فرض (Default Constructor) :
public class Test {
public Test(){
System.out.println("print from constructor");
}
}
در این کلاس چون کانستراکتور Test() فاقد پارامتر است کانستراکتور پیش فرض می باشد.
یک کانستراکتور باید هم نام با نام کلاس باشد.در کلاس Test تمامی سازنده ها باید با نام Test ایجاد شوند.
یک سازنده می تواند سازنده ی دیگر همان کلاس را فراخوانی کند یا در بحث شی گرایی یک سازنده کلاس می تواند سازنده ی کلاسی که از آن مشتق شده یا ارث بری می کند را فراخوانی کند (با اشاره گر های this و super).
سازنده ها نوع بازگشتی ندارند یعنی مقداری را return نمی کنند.
نوع دسترسی کانستراکتور ها می تواند public ، private ، protected و یا default access باشد.
سازنده ها می توانند تعداد پارامتر های یکسان اما با نوع داده ایی متفاوت باشد.به مثال زیر توجه کنید :
public class Test2 {
public Test2(int i){}
public Test2(double d){}
public Test2(String s){}
}
نکته قابل توجه این است که هر سه سازنده دارای یک پارامتر می باشند و هم نام اند ولی دارای پارامتر هایی با نوع داده ایی متفاوت می باشند که آنها را از هم متمایز می کند. این تمایز زمانی مشخص می شود که شما در حال ایجاد آبجکتی از کلاس باشید. برای نمونه :
public class ConstructorTest {
Test2 t1;
Test2 t2;
Test2 t3;
public static void main(String[] args){
t1 = new Test2(1);
t2 = new Test2(10.2);
t3 = new Test3("String");
}
}
در اینجا پارامتر هر نمونه ایی که از کلاس Test2 ایجاد کرده ایم در حین عمل new کردن، مشخص می کند که نمونه ی ایجاد شده (در این جا t1 t2 t3) با کدام یک از کانستراکتور کلاس Test2 نمونه سازی شود. به هر حال با اجرای برنامه عملی اتفاق نمی افتد زیرا دستوری در سازنده ها وجود ندارد.
نکته ی مهم در کلاس Test2 این است که این کلاس سازنده ی پیش فرض ندارد.زمانی که ما برای کلاس سازنده ایی تعریف نکنیم به صورت خودکار برای کلاس سازنده پیش فرض در نظر گرفته می شود تا از بروز خطاهایی که می توانند ناشی از فراموشی برنامه نویس برای ایجاد سازنده پیش فرض باشد جلوگیری شود.
اما زمانی که شما سازندهی پیش فرض تعریف نمی کنید اما کلاس دارای سازنده می باشد مانند مثال زیر :
public class Test3 {
public Test3(int i){}
public static void main(String[] args){
Test3 t1 = new Test3(); // compile error
Test3 t2 = new Test3(10);
}
}
دلیل اینکه نمونه t1 یک خطای زمان کامپایل می باشد این است که کلاس سازنده پیش فرض ندارد و چون دارای سازنده ایی با پارامتر می باشد به صورت خوذکار برای آن سازنده پیش فرض در نظر گرفته نمی شود.
پس این نکته مهم را باید توجه داشته باشیم.
خوب حالا مثالی از سازنده برای مقدار دهی متغییر های یک کلاس در زمان ایجاد نمونه از آن کلاس در ادامه مطالب ارائه می دهیم.