سازندهها (Java Constructors)
سازندهها (Constructors): تولد یک شیء 👶🔨
سازنده یک متد خاص است که در لحظه ساخته شدن شیء (زمانی که new را میزنید) به صورت خودکار اجرا میشود. کاربرد اصلی آن، مقداردهی اولیه به ویژگیهای شیء است.
۱. قوانین سازنده
- نام سازنده باید دقیقاً مشابه نام کلاس باشد.
- سازنده هیچ نوع بازگشتی (حتی
void) ندارد.
۲. سازندههای پارامتردار (Constructor Parameters) 📨
این پرکاربردترین حالت است. شما مقادیر اولیه را موقع ساخت شیء به آن میدهید:
{code_block('public class Car {\n int year;\n String brand;\n\n public Car(int y, String b) {\n year = y;\n brand = b;\n }\n\n public static void main(String[] args) {\n Car myCar = new Car(2023, "BMW");\n }\n}')}چرا از سازنده استفاده میکنیم؟
بدون سازنده، شما باید بعد از ساخت هر شیء، تک تک ویژگیهای آن را به صورت دستی پر کنید. با سازنده، شیء شما در همان لحظه تولد، با دادههای صحیح آماده کار است.
بخش تخصصی: مهندسی شیءگرایی و مدیریت حافظه 🏗️💎
در این بخش، به مفاهیمی میپردازیم که برای درک فیزیکیِ اتفاقاتِ پشت صحنه در جاوا ضروری هستند.
۱. کالبدشکافی شیء در حافظه Heap
زمانی که شما با دستور new یک شیء میسازید، جاوا بخشی از حافظه Heap را به آن اختصاص میدهد. هر شیء دارای یک "Header" است که شامل اطلاعات مدیریتی جاوا (مثل اطلاعات Garbage Collection) است و سپس فیلدها و دادههای شیء قرار میگیرند. متغیرِ شما در واقع فقط یک "آدرس" یا رفرنس به این منطقه از حافظه را در خود دارد.
۲. مدیریت چرخه عمر اشیاء (Garbage Collection)
برخلاف زبانهایی مثل ++C، در جاوا شما نیازی به حذف دستی اشیاء ندارید. وقتی هیچ متغیری به یک شیء اشاره نکند (مثلاً ریفرنس آن null شود)، آن شیء "یتیم" میشود. Garbage Collector به صورت خودکار این اشیاء را شناسایی کرده و حافظه آنها را برای استفادههای بعدی آزاد میکند.
۳. کدهای تمیز: جداسازی State و Behavior
یک کلاس خوب، کلاسی است که وضعیت (Attributes) را از رفتار (Methods) به درستی تفکیک کند. متغیرهای کلاس باید فقط دادههایی را نگه دارند که ذاتِ آن موجودیت را تعریف میکنند. افراط در تعریف Attributes باعث سنگین شدن اشیاء و پیچیدگی در تستنویسی میشود.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
سازنده کلاس User را طوری کامل کنید که مقدار پارامتر u را در ویژگی username قرار دهد.
class User {
String username;
public User(String u) {
username = u;
}
}
public class Main {
public static void main(String[] args) {
User myUser = new User("Alice");
System.out.println(myUser.username);
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.