دوره‌ها / JAVA / سازنده‌ها (Java Constructors)

سازنده‌ها (Java Constructors)

15 دقیقه Article

سازنده‌ها (Constructors): تولد یک شیء 👶🔨

سازنده یک متد خاص است که در لحظه ساخته شدن شیء (زمانی که new را می‌زنید) به صورت خودکار اجرا می‌شود. کاربرد اصلی آن، مقداردهی اولیه به ویژگی‌های شیء است.

۱. قوانین سازنده

  • نام سازنده باید دقیقاً مشابه نام کلاس باشد.
  • سازنده هیچ نوع بازگشتی (حتی void) ندارد.
{code_block('public class Car {\n int modelYear;\n\n public Car() { // این یک سازنده است\n modelYear = 2024;\n }\n}')}

۲. سازنده‌های پارامتردار (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}')}
سازنده پیش‌فرض: اگر شما خودتان هیچ سازنده‌ای تعریف نکنید، جاوا یک سازنده خالی و مخفی برای شما در نظر می‌گیرد. اما اگر یک سازنده پارامتردار بنویسید، دیگر آن سازنده پیش‌فرض از بین می‌رود.

چرا از سازنده استفاده می‌کنیم؟

بدون سازنده، شما باید بعد از ساخت هر شیء، تک تک ویژگی‌های آن را به صورت دستی پر کنید. با سازنده، شیء شما در همان لحظه تولد، با داده‌های صحیح آماده کار است.

Constructor Overloading: شما می‌توانید چندین سازنده مختلف برای یک کلاس داشته باشید (مثلاً یکی که فقط نام می‌گیرد و یکی که هم نام و هم سن می‌گیرد).
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی شیءگرایی و مدیریت حافظه 🏗️💎

در این بخش، به مفاهیمی می‌پردازیم که برای درک فیزیکیِ اتفاقاتِ پشت صحنه در جاوا ضروری هستند.

۱. کالبدشکافی شیء در حافظه Heap

زمانی که شما با دستور new یک شیء می‌سازید، جاوا بخشی از حافظه Heap را به آن اختصاص می‌دهد. هر شیء دارای یک "Header" است که شامل اطلاعات مدیریتی جاوا (مثل اطلاعات Garbage Collection) است و سپس فیلدها و داده‌های شیء قرار می‌گیرند. متغیرِ شما در واقع فقط یک "آدرس" یا رفرنس به این منطقه از حافظه را در خود دارد.

۲. مدیریت چرخه عمر اشیاء (Garbage Collection)

برخلاف زبان‌هایی مثل ++C، در جاوا شما نیازی به حذف دستی اشیاء ندارید. وقتی هیچ متغیری به یک شیء اشاره نکند (مثلاً ریفرنس آن null شود)، آن شیء "یتیم" می‌شود. Garbage Collector به صورت خودکار این اشیاء را شناسایی کرده و حافظه آن‌ها را برای استفاده‌های بعدی آزاد می‌کند.

۳. کدهای تمیز: جداسازی State و Behavior

یک کلاس خوب، کلاسی است که وضعیت (Attributes) را از رفتار (Methods) به درستی تفکیک کند. متغیرهای کلاس باید فقط داده‌هایی را نگه دارند که ذاتِ آن موجودیت را تعریف می‌کنند. افراط در تعریف Attributes باعث سنگین شدن اشیاء و پیچیدگی در تست‌نویسی می‌شود.

نکته پایانی: شیءگرایی فقط یک روش کدنویسی نیست؛ بلکه روشی برای "مدل‌سازی جهان واقعی" در دنیای دیجیتال است. هر چقدر مدل‌سازی شما دقیق‌تر باشد، نرم‌افزار شما پایدارتر خواهد بود.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تکمیل سازنده Easy
سوال تمرین

سازنده کلاس User را طوری کامل کنید که مقدار پارامتر u را در ویژگی username قرار دهد.

پاسخ تمرین
JAVA
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);
  }
}

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.