مشکل با مفهوم private static
سلام
استاد در اموزش بخش 5 در مورد menu می گویند برای انکه بتوانیم از منو های ساخته شده در متد()onCreateOptionsMenu در ()onOptionsItemSelected راحت تر استفاده کنیم برای انها فیلدی از نوع int تعریف می کنیم تا به جای item id =1 با استفاده از نام فیلم به طور مثال back menu با نگاه به ان راحت بفهمیم که کارش چیست و فهم کد نوشته شده را راحت تر کنیم .
اما سوال من اینجا است که استاد فیلد را const تعریف کردند یعنی
private static final int BACK_MENU=1;
در حالی که ما یک متغیر را زمانی const تعریف می کردیم که می خواستیم در یک کلاس دیگر ان را فراخوانی کنیم
MainActivity.BACK_MENU;
ولی وقتی ما محدوده ی دید (visibility) را private تعریف می کنیم امکان دیده شدن ان را به سایر کلاس ها نمی دهیم که این با دادن قابلیت static که برای دیده شدن یک const در سایر کلاس ها است در تضاد است.ممنون می شوم من را راهنمایی بفرمایید.
زمانی یک مقدار را داخل const یا ثابت ها می ریزیم که اون مقدار به هیچ عنوان نباید تغییر کنه (اگر تغییر کنه باعث میشه که برنامه به درستی کار نکنه و یا خطا بده). const ها تنها یک مرتبه مقدار دهی می شوند(هنگام ساخته شدن) و به هیچ عنوان امکان تغییر دادن مقدارشون نیست.
قانون تعریف کردن constها به این شکله که ابتدا کلمه static سپس final و بعد نوع و در آخر نام نوشته میشه:
static final int BACK_MENU=1;
حالا مثل مثل متغیرها که می تونستیم محدوده دسترسی رو مشخص کنیم می تونیم محدوده دسترسی constها رو هم مشخص کنیم(مثلا private, public یا ... باشه)
private static final int BACK_MENU=1;
ممنون حسین جان بابت جواب .
یک نکته ای هست ان هم این که ویژگی که باعث می شنه تنها هنگام تعریف اولیه ی یک متغیر متونیم به او مقدار بدهیم از کلمه ی کلیدی final می یاد یعنی اگر ما از کلمه ی کلیدی static استفاده نکنیم هم همین ویژگی را داریم. از استتیک استفاده می کنیم تا مثلا اگر محدوده ی دید protected تعریف شده باشد این امکان را داشته باشیم که در کلاس extend شده از کلاس اولیه بتونیم بگیم ParentClass.CONST حالا سوال من این هست که اگر ما ویژگی static را به یک متغیر می دهیم تا بتوانیم از ان در کلاس های دیگر استفاده کنیم عملا این امکان را با تعیین محدوده ی دید به حالت private از بین برده ایم .این قسمت هست که من در موردش سوال دارم ممنون می شم من را راهنمایی کنید.
در مورد Final همونطور که دوستمون هم اشاره داشتند برای زمانی استفاده میشه که قرار نیست یک متغیر به هیچ عنوان تغییر کنه و در ابتدا یکبار initial میشه .
در رابطه با static یکی از کاربرد هاش دسترسی به متد ها و یا فیلد های استاتیک در همه جا هست.
اما یکی دیگر از ویژگی های مهم در static این هست که ما میتونید مثلا یک آرایه رو به صورت static در بیاریم و مقادیری که توش ریخته میشه در حافظه رم باقی میمونه مثل G.inflater یک بار این متغیر مقدار دهی میشه و دیگه نیازی به ساختن اون نیست و تا زمانی که اپلیکیشن شما در حال اجرا هست این متغیر باقی میمونه .
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .