View Full Version : صفت استاتیک و متد استاتیک
mnss87
جمعه 06 اردیبهشت 1387, 23:46 عصر
سلام دوستان.
صفت استاتیک و متد استایک چیست؟ نمونه های واقعی از آن را مثال بزنید.
mazdadoost
دوشنبه 16 اردیبهشت 1387, 15:08 عصر
با تشکر.
متد های کلاس :
1-به خود کلاس تعلق دارن نه به وهله (Instance) های کلاس یعنی باید برای فراخونی متد از دستور زبان :ClassName.MethodName() استفاده کرد.
2-در این متد ها تمام فیلد های استاتیک و متد های دیگه استاتیک و غیر اون در دسترس هستن .فیلد های غیر استاتیک به علت اینکه متعلق به وهله های کلاس هستن و اجازه استفاده در متد های استاتیک رو ندارن.
3-کلمه کلیدی this هم که در واقع reference به شی جاری هست قابل استفاده در متد استاتیک نیست.متد های استاتیک اصولا اطلاعی از خود وهله ها ندارن به کلاس وصل میشن!
4-چرا از این متد ها استفاده میشه :
*: شبیه سازی توابع عمومی .مثل c: در جاوا هیچ متدی امکان تعریف در خارج کلاس و به صورت مستقل نداره!برای استفاده از یک متد یا باید وهله ای از اون کلاس ساخت یا متد رو به صورت استاتیک تعریف کرد و به صورت ClassName.MethodName ازش استفاده کرد.به این ترتیب میشه کلاس هایی درست کرد که صورت عمومی توابعی رو در اختیار کل برنامه میذارن.مثل کلاس Math!
*:پیاده کردن Design Pattern هایی مثل Factory Method و Singleton : گاهی بعضی اشیاء خواص به جهت مسایلی مانند مصرف حافظه زیاد و به تبع ایجاد بار اضافه روی gc و در نهایت CPU لازمه که فقط و فقط یک شی ازشون در کل JVM ساخته بشه!به عبارتی هر گاه که برنامه عملگر new رو برای ساخت شی از این کلاس استفاده میکنه باید تضمین بشه که فقط یک بار این شی ساخته میشه!مثالی از این حالت صف چاپ پرینتر می باشد.اسم این کلاس رو iSpooler میذاریم به کد زیر توجه کنید :
class iSpooler
{
//this is a prototype for a printer-spooler class
//such that only one instance can ever exist
static boolean instance_flag = false; //true if 1 instance
//the constructor is privatized-
//but need not have any content
private iSpooler() { }
//static Instance method returns one instance or null
static public iSpooler Instance()
{
if (! instance_flag)
{
instance_flag = true;
return new iSpooler(); //only callable from within
}
else
return null; //return no further instances
}
//-------------------------------------------
public void finalize()
{
instance_flag = false;
}
}
برسی FactoryMethod رو به خودت میسپارم.
موارد استفاده دیگه ای هم این متد ها دارن که واقعا باید به شدت وارد بحث Design Pattern بشیم.شاید وقتی دیگر.
فیلد های استاتیک این خصوصیات رودارن:
1-بین تمام وهله های کلاس مشترک هستن.اگه یه وهله تغیری در یه فیلد استاتیک بده در تمام وحله های دیگه هم مقدار فیلد تغیر میکنه.
2-اگه کلمه کلیدی final رو به تعریف یک فیلد استاتیک اضافه کنیم فیلد به صورت یک ثابت میشه!و اولا نمیشه مقدارشو تغیر داد .ثانیا باید به صورت دستور زبان ClassName.FieldName استفاده شده!
و ...
کاربرد ها :
1-شبیه سازی کلمه کلیدی const در جاوا با تعریف فیلد های public static final.
2-ایجاد فیلد هایی که بین وهله های مختلف کلاس رابطه برقرار می کنن.
3-....
امیدوارممفید بوده باشه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.