بهتر بود قبلش سرچ میکردید. بخشی از جواب سوالاتتون در این تاپیک بحث کردم: https://barnamenevis.org/showthread.php?545254
اما متد استاتیک به شی ساخته شده از کلاس وابسته نیست، بلکه فقط میتونه از فیلدهای استاتیک استفاده کنه که برای یک کلاس همواره یک مقدار وجود داره. ولی وقتی وارد حالت غیر استاتیک میشیم، به ازای هر شی مقادیر اون شی ساخته شده از کلاس تغییر میکنه و در نتیجه متدهای غیراستاتیک به مقادیر فیلدهای غیراستاتیک دسترسی دارن و جواب های مختلفی برای اشیا مختلف ممکنه داشته باشند. همچنین برای متدهای استاتیک نیازی به ساختن شی (new کردن) نیست. در کل اینکه بحث متدهای استاتیک و غیراستاتیک تو تاپیک به نظرم به خوبی مطرح شده.
در مورد کلاس استاتیک نمیدونم تو اون تاپیک توضیح دادم یا نه ولی در این پست توضیح داده شده تا حدودی https://barnamenevis.org/showthread.php?290161
ولی در کل متد و فیلد استاتیک رو فعلا بدونید چون لازمه، وقتی مفهومش براتون جا افتاد (با تمرین) و اینکه کی استاتیک بگیرید و کی داینامیک اونوقت برید سروقت مفاهیم پیچیده تر (و به انگلیسی سرچ کنید چون مقالات مفصل و دقیق زیادی داره). خصوصا اینکه نمیشه قطعی گفت کدوم متد رو استاتیک بگیرید خوبه کدوم رو غیراستاتیک، یا فیلدها رو و با تمرین خودتون به یه حس یا بینش در این باره میرسید.
در مورد سازنده (constructor) استاتیک، نمیتونیم بگیم سازنده استاتیک داریم (چون برای استاتیک شی ای ساخته نمیشه که بخواد سازنده داشته باشه) ولی میتونیم بلاک استاتیک داشته باشیم. بلاک استاتیک عملکردش فقط مقدار دهی اولیه به فیلدهای استاتیکمون هست.
مثلا به جای اینکه بنویسیم:
static int i=2;
میتونیم بنویسیم:
static int i;
static{
i=2;
}
تفاوتش اینه که در حالت دوم میتونیم از حلقه و شرط و... استفاده کنیم و فیلدهای استاتیک رو به روش پیچیده تری مقدار دهی اولیه کنیم.