PDA

View Full Version : مفهوم ۲ واژه static و final



slr560
دوشنبه 27 مرداد 1393, 10:36 صبح
سلام دوستان
من توی درک مفهوم static و final یکم مشکل دارم. یکی میشه کامل توضیح بده که وقتی پشت متد یا متغییری میاد چه معنی میده؟

manoto1371
دوشنبه 27 مرداد 1393, 11:41 صبح
سلام
final مثل const تو دات نت هست، دیگه نمیشه مقدار متغیر در برنامه تغییر کند، مثلا برای نمونه کار محاسباتی شما یک متغییر برای عدد پی (3.14) در ریاضی تعریف کردی آیا مقدار این تغییر میکنه؟خیر. پس متغیرشو از نوع final میزنی. اما static از حافظه ثبات استفاده میکنه و واکشی سریعتر میکنه، در موارد شی گرایی هم کاربرد هایی دارد که ترجیح میدم خودتون بیشتر مطالعه کنید البته منبع اصلی.
موفق باشید.

slr560
دوشنبه 27 مرداد 1393, 11:46 صبح
ممنون دسوت عزیز
مطالعه کردم ولی در بعضی جاها جوری استفاده میشه که شک میکنم مفهومش همونیه که میخوام
از دوستان کسی معنی عمیق تری از static نداره؟

cups_of_java
دوشنبه 27 مرداد 1393, 11:55 صبح
final همه چیز رو فیکس میکنه... اگه شما پشت یه متد ازش استفاده کنی هم همینطوره. فیکس شدن متد یعنی چی؟ یعنی از تغییر (Override) کردن اون جلوگیری میکنه. خلاصه یعنی اینکه متد final رو نمیشه تو بچه ها override کرد.


اما Static
شما وقتی یک متغیر داخل یه کلاس تعریف میکنی، اون متغیر به اشیایی که از اون کلاس درست خواهند شد متعلق هستش. یعنی هر شی جدیدی که درست کنی یه نسخه واسه خودش از اون متعیر داره توی حافظه خودش. که این اتفاق نرمالیست که میافته و واسه همین به متغیر ها میگن Member variable یا Property (چون مال شی هستن...)
اما زمانی که یه متغیر رو Static تعریف کنی. اون متغیر رو بیرون از فضای هر شی تعریف میکنه. در واقع متغیر میشه متغیر کلاس! نه شی! یعنی متغیر به جای اینکه واسه هر شی توی حافظه اون شی جداگونه وجود داشته باشه، بک بار، یک جا و اونم توی حافظه سراسری کلاس تغریف شده.
اگه این مطلب مهم رو گرفته باشی... خودت دیگه می تونی تا آخرش بری:
خوب متغیری که static هستش نیازی به ساختن شی برای دسترسی و استفاده شدن نداره!
متغیری که static هستش فقط یه نسخه ازش وجود داره به ازای تمام اشیای کلاس...
متغیری که static هستش مثل متغیر های سراسری (global) توی زبان های برنامه نویسی دیگه می مونه

بر همین اساس Static یه جورایی دقیقن متضاد با مفهوم this و اشیا (شی گرایی) هستش. واسه همین استفاده ازش تا جایی که بشه توصیه نمیشه. مگر جاهایی که مجبوریم.

حالا متد static هم تعریفش رو باید بدونی خودت دیگه... (فکر کن)