سطح دسترسی/اصلاحگرها (Java Modifiers)
اصلاحکنندهها (Modifiers): کنترل دسترسی 🛡️🔑
اصلاحکنندهها کلماتی کلیدی هستند که مشخص میکنند چه کسی و از کجا اجازه دسترسی به کلاسها، ویژگیها و متدها را دارد.
۱. انواع اصلاحکنندههای دسترسی (Access Modifiers)
- public: از همه جا قابل دسترسی است.
- private: فقط و فقط در داخل همان کلاس قابل دسترسی است (بسیار مهم برای امنیت).
- protected: در همان پکیج و در کلاسهای فرزند قابل دسترسی است.
- Default: اگر چیزی ننویسید، فقط در همان پکیج قابل دسترسی است.
۲. اصلاحکنندههای غیر دسترسی (Non-Access Modifiers) ⚙️
اینها ویژگیهای دیگری را به کد اضافه میکنند:
- final: کلاس قابل ارثبری نیست، متد قابل بازنویسی نیست و متغیر غیرقابل تغییر است.
- static: متعلق به کلاس است نه به شیء.
- abstract: مخصوص کلاسها و متدهای انتزاعی (که در ادامه فصل خواهیم دید).
public بگذارید، هر کسی میتواند از بیرون آن را دستکاری کند. با private کردن، شما کنترل کامل روی دادهها دارید.
مثال Private:
{code_block('class Person {\n private String name; // غیرقابل دسترسی از بیرون\n}')}public static final int MAX_LIMIT = 100;
private شروع کنید و فقط اگر واقعاً نیاز بود، دسترسی را بازتر کنید.
بخش تخصصی: مهندسی شیءگرایی و مدیریت حافظه 🏗️💎
در این بخش، به مفاهیمی میپردازیم که برای درک فیزیکیِ اتفاقاتِ پشت صحنه در جاوا ضروری هستند.
۱. کالبدشکافی شیء در حافظه Heap
زمانی که شما با دستور new یک شیء میسازید، جاوا بخشی از حافظه Heap را به آن اختصاص میدهد. هر شیء دارای یک "Header" است که شامل اطلاعات مدیریتی جاوا (مثل اطلاعات Garbage Collection) است و سپس فیلدها و دادههای شیء قرار میگیرند. متغیرِ شما در واقع فقط یک "آدرس" یا رفرنس به این منطقه از حافظه را در خود دارد.
۲. مدیریت چرخه عمر اشیاء (Garbage Collection)
برخلاف زبانهایی مثل ++C، در جاوا شما نیازی به حذف دستی اشیاء ندارید. وقتی هیچ متغیری به یک شیء اشاره نکند (مثلاً ریفرنس آن null شود)، آن شیء "یتیم" میشود. Garbage Collector به صورت خودکار این اشیاء را شناسایی کرده و حافظه آنها را برای استفادههای بعدی آزاد میکند.
۳. کدهای تمیز: جداسازی State و Behavior
یک کلاس خوب، کلاسی است که وضعیت (Attributes) را از رفتار (Methods) به درستی تفکیک کند. متغیرهای کلاس باید فقط دادههایی را نگه دارند که ذاتِ آن موجودیت را تعریف میکنند. افراط در تعریف Attributes باعث سنگین شدن اشیاء و پیچیدگی در تستنویسی میشود.
تمرینهای عملی
برای تثبیت یادگیری این درس تمرینهای زیر را حل کنید
یک متغیر int ثابت (غیرقابل تغییر) به نام CODE با مقدار 99 در کلاس Secret تعریف کنید.
class Secret {
public final int CODE = 99;
}
public class Main {
public static void main(String[] args) {
Secret s = new Secret();
System.out.println(s.CODE);
}
}
آماده رفتن به درس بعدی هستید؟
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.