1402-01-24 13:39 در جاوا، یک متغیر استاتیک در یک بلوک ناشناس
xavier12

 
در جاوا، چرا نمی توانیم یک متغیر استاتیک را در یک بلوک ناشناس مقداردهی اولیه کنیم؟ به عنوان مثال، چرا این کد کامپایل نمی شود؟
public class A {
{
static int a = 1;
}
}

من یک خطای کامپایل دریافت می کنم که می گوید فقط آخرین اصلاح برای متغیر a مجاز است.

یک بلوک زمانی که مستقیما در یک کلاس یافت می شود، یک بلوک اولیه ساز نمونه است. در یک نمونه، بلوک اولیه، متغیرهای استاتیک را نمی توان اعلام کرد.

من این scaler را خوانده ام و در سایت های مختلف جستجو کرده ام و هنوز نتوانسته ام آن را بفهمم. کسی میتونه لطفا به من کمک کنه؟ آیا تعریف متغیر به عنوان استاتیک به آن خاصیت اضافی می دهد؟
1402-02-02 21:44
حاجی شریفی
مؤسس سایت
 
سلام
بنده جاوا بلد نیستم! ولی کد زیر را در دو سایت آنلاین وارد کردم که هر دو کامپایل شد و خروجی داشت!
class  HelloWorld
{
static int x = 5;
public static void main(String [ ] args)
{
System.out.println("Hello, World!" + x);
}
}


کامپایلر آنلاین جاوا
https://www.programiz.com/java-programming/online-compiler
https://www.onlinegdb.com/online_java_compiler

متغییرهای static بدون توجه به instance های مختلف کلاس ها ، به صورت مستقل و واحد یک مرتبه در حافظه بارگذاری میشود.
دقیق به همین دلیل متدهای static به this دسترسی ندارند، چون بین هزاران وهله و this مشترک هستند و یک this تک برای آنها قابل تصور نیست.
(در سی-شارپ متغییرهای static برای هر نوع کلاس های generic مجدد یک مرتبه بارگذاری میشود)

در معماری های رایج فعلی استفاده از متغییرهای static پیشنهاد نمیشود و در صورت نیاز پیشنهاد میشود از مفهوم سرویس singleton با معماری dependency injection استفاده شود