Java Non Access Modifiers
تو جاوا یکسری 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 نیستند.
+ نوشته شده در یکشنبه ۱۳ تیر ۱۴۰۰ ساعت 9:34 توسط No One