View Full Version : سوال: مقدار دهی متغیر در بلوک استاتیک
sajjad4563
سه شنبه 24 تیر 1393, 12:02 عصر
با سلام
کسی میتونه بگه این کد چرا 100 میاره تو خروجیش؟
یکم توضیح میدین که چیکار میکنه؟
public class Test
{
static int i;
static
{
System.out.println("Static Initializer");
i = 50;
}
int methodOfTest()
{
i = 100;
return i;
}
public static void main(String[] args)
{
System.out.println(new Test().methodOfTest());
}
}
cups_of_java
سه شنبه 24 تیر 1393, 14:12 عصر
چرا 100 نده؟ متغیر استاتیک i رو تعریف می کنه و در ابتدای تعریف و هر استفاده ای از اون کلاس مقدارش رو 50 میکنه....
بعد یه شی میگیره و متدی رو صدا میزنه که اون متد مقدار i رو 100 میکنه.....
sajjad4563
سه شنبه 24 تیر 1393, 19:36 عصر
چرا 100 نده؟ متغیر استاتیک i رو تعریف می کنه و در ابتدای تعریف و هر استفاده ای از اون کلاس مقدارش رو 50 میکنه....
بعد یه شی میگیره و متدی رو صدا میزنه که اون متد مقدار i رو 100 میکنه.....
i=50 وقتی میشه که یه نمونه از کلاس ساخته میشه؟ یا قبل اون؟
محمد فدوی
سه شنبه 24 تیر 1393, 19:41 عصر
i=50 وقتی میشه که یه نمونه از کلاس ساخته میشه؟ یا قبل اون؟
پاسخ سوالت از اینجا (http://stackoverflow.com/questions/9130461/when-is-the-static-block-of-a-class-executed) (Stackoverflow):
Static initialization block is being ran when JVM (class loader - to be specific) loads StaticClass (when it is first time referenced in code).
بلوک static مستقل از ایجاد شئ عمل میکنه. درحقیقت این بلوک در زمان اجرا وقتی که کلاس توسط ماشین مجازی جاوا لود میشه اجرا میشه (یعنی حتی قبل از اجرای تابع main!)
cups_of_java
چهارشنبه 25 تیر 1393, 01:55 صبح
قبل از اجرای main همیشه نه! فقط وقتی که main توی همون کلاس باشه... وگرنه وقتی استاتیک ها اجرا میشن برای اولین بار، که برای اولین بار JVM به اسم کلاسی در کد برسه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.