تو جاوا یکسری modifire خاص دیگه هم داریم:

  • static: برای کلاس ها، توابع و متغییر ها استفاده میشه.
    • به اونها به صورت مستقیم دسترسی داریم و لازم نیست ی نمونه از کلاس اصلی درست کنیم.
    • فقط یک کپی از متغییر های static وجود داره بدون در نظر گرفتن تعداد نمونه های کلاس.
    • متغییر های static به عنوان متغییر های کلاس هم شناخته میشن.
    • نباید متغییر های محلی رو static تعریف کنیم.
    • توابع static از هیچ متغییری ک در کلاس تعریف شده باشن استفاده نمی‌کنن.
    • توابع staic فقط داده ها رو از ورودی میگیرن و اونها رو پردازش می‌کنن، بدون هیچ رفرنسی به بیرون تابع.
    • برای دسترسی به اونها کافی بعد از اسم کلاس نقطه بزاریم و نیازی به نمونه سازی از کلاس نیست.
  • final: برای کلاس ها، توابع و متغییر ها استفاده میشه.
    • با هدف نهایی کردن پیازه سازی آنها استفاده می‌شود.
    • متغییر final فقط یکبار قابلیت مقدار دهی دارد.
    • اگر به عنوان مقدار اولیه به متغییر final یک متغییر معمولی دیگر بدهیم، مقدار همان لحظه متغییر معمولی در متغیر final ذخیره می‌شود و با تغییر مقدار متغییر معمولی مقدار متغیر final تغییر نمی‌کند.
    • متغییر های final معمولا با static ادقام می‌شوند تا داده های ثابت را در پروژه ایجاد کنند.
    • توابع final قابلیت باز نویسی ندارند. و زمانی از آن استفاده می‌شود ک می‌خواهیم مطمئن شویم این تابع از خارج از کلاس تغییری نمی‌کند.
    • کلاس های final قابلیت توسعه را ندارند و هیچ کلاسی نمی‌تواند از آنها ارث بری کند.
  • abstract: برای کلاس ها و توابع استفاده میشه.
    • از کلاس abstract نمی‌توان نمونه ساخت.
    • تنها هدف کلاس های abstract توسعه و ارث بری از آنهاست.
    • یک کلاس نمی‌تواند همزمان abstract و final باشد.
    • اگه یک کلاس تابع abstract داشته باشد باید خود آن نیز abstract باشد.
    • کلاس های abstract می‌توانند توابع معمولی یا final نیز داشته باشند.
    • توابع abstract نیازی به پیاده سازی ندارند.
    • توابع abstract نمی‌توانند final یا private باشند
    • کلاسی ک کلاس abstract را توسعه می‌دهد باید تمامی توابع abstract را پیاده سازی بکند مگر اینکه خود آن نیز abstract باشد.
    • اگر کلاسی تابع abstract داشته باشد باید خود کلاس نیز abstract باشد اما کلاس abstract الزامی به داشتن متد abstract ندارد.
    • توابع abstract با semicolon به پایان می‌رسند.
  • synchronized و volatile و transient:
    • تابع synchronized یعنی فقط یک thread می‌تواند به آن دسترسی داشته باشد.
    • متغییر transient در زمان serializing کمتر در نظر گرفته نمی‌شوند.
    • متغییر volatile بهینه نیست و زمانی کاربرد دارد ک ما بیش از یک thread داریم و هر تغییری در آن بلافاصله در متغییر اصلی ایجاد می‌شود.
    • متغییر های volatile نمی‌توانند final باشند.
    • به طور کلی volatile از synchronized بهینه تر است.
    • volatile یک مغییر را atomic می‌کند ولی synchronized یک متد را atomic می‌کند.
    • atomic عملی است ک قادر به تجزیه شدن به اعمال کوچکتر نباشد. یا کامل انجام می‌شود یا انجام نمی‌شود. هیچ اتفاقی در وسط اجرای یک عمل atomic انجام نمی‌شود.
    • خواندن و نوشتن در داده های اولیه به جز (long و double) atomic هستش.
    • long و double از متغییر های کوچکتر int و float استفاده می‌کنند به همین دلیل atomic نیستند.

+ +