View Full Version : مبتدی: مفهوم static
milad.ghain
شنبه 05 اسفند 1396, 01:40 صبح
سلام دوستان خسته نباشید
من مفهوم استاتیک و این که استاتیک بودن یه ویژگی یعنی اون مربوط به کل کلاس هست متوجه شدم.ولی راستش اینکه یه تابع استاتیک هست و این چه معنی میده درست برام جا نیفتاده. ممنون میشم راهنمایی کنید.کلاس هم همینطور.اینکه یه کلاس استاتیک میشه چه معنی میده؟یک سال دیگه هم اینکه آیا میشه یک constructor استاتیک داشته باشی؟اگه میشه چه مفهومی داره؟
vahid-p
سه شنبه 08 اسفند 1396, 11:13 صبح
بهتر بود قبلش سرچ میکردید. بخشی از جواب سوالاتتون در این تاپیک بحث کردم: http://barnamenevis.org/showthread.php?545254
اما متد استاتیک به شی ساخته شده از کلاس وابسته نیست، بلکه فقط میتونه از فیلدهای استاتیک استفاده کنه که برای یک کلاس همواره یک مقدار وجود داره. ولی وقتی وارد حالت غیر استاتیک میشیم، به ازای هر شی مقادیر اون شی ساخته شده از کلاس تغییر میکنه و در نتیجه متدهای غیراستاتیک به مقادیر فیلدهای غیراستاتیک دسترسی دارن و جواب های مختلفی برای اشیا مختلف ممکنه داشته باشند. همچنین برای متدهای استاتیک نیازی به ساختن شی (new کردن) نیست. در کل اینکه بحث متدهای استاتیک و غیراستاتیک تو تاپیک به نظرم به خوبی مطرح شده.
در مورد کلاس استاتیک نمیدونم تو اون تاپیک توضیح دادم یا نه ولی در این پست توضیح داده شده تا حدودی http://barnamenevis.org/showthread.php?290161
ولی در کل متد و فیلد استاتیک رو فعلا بدونید چون لازمه، وقتی مفهومش براتون جا افتاد (با تمرین) و اینکه کی استاتیک بگیرید و کی داینامیک اونوقت برید سروقت مفاهیم پیچیده تر (و به انگلیسی سرچ کنید چون مقالات مفصل و دقیق زیادی داره). خصوصا اینکه نمیشه قطعی گفت کدوم متد رو استاتیک بگیرید خوبه کدوم رو غیراستاتیک، یا فیلدها رو و با تمرین خودتون به یه حس یا بینش در این باره میرسید.
در مورد سازنده (constructor) استاتیک، نمیتونیم بگیم سازنده استاتیک داریم (چون برای استاتیک شی ای ساخته نمیشه که بخواد سازنده داشته باشه) ولی میتونیم بلاک استاتیک داشته باشیم. بلاک استاتیک عملکردش فقط مقدار دهی اولیه به فیلدهای استاتیکمون هست.
مثلا به جای اینکه بنویسیم:
static int i=2;
میتونیم بنویسیم:
static int i;
static{
i=2;
}
تفاوتش اینه که در حالت دوم میتونیم از حلقه و شرط و... استفاده کنیم و فیلدهای استاتیک رو به روش پیچیده تری مقدار دهی اولیه کنیم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.