آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل با مفهوم private static

ابراهیم  11 سال پیش  10 سال پیش
+3 0

سلام

استاد در اموزش بخش 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 در سایر کلاس ها است در تضاد است.ممنون می شوم من را راهنمایی بفرمایید.

 

 
0 0
چند وقته مشارکت تو پاسخگویی به سوالات کم شده دوستان لطفا اگه جواب را بلدند راهنمایی کنند ممنون. (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
hosseinAmini  11 سال پیش
+3 0

زمانی یک مقدار را داخل const یا ثابت ها می ریزیم که اون مقدار به هیچ عنوان نباید تغییر کنه (اگر تغییر کنه باعث میشه که برنامه به درستی کار نکنه و یا خطا بده). const ها تنها یک مرتبه مقدار دهی می شوند(هنگام ساخته شدن) و به هیچ عنوان امکان تغییر دادن مقدارشون نیست.
قانون تعریف کردن constها به این شکله که ابتدا کلمه static سپس final و بعد نوع  و در آخر نام نوشته میشه:

 static final int BACK_MENU=1;

حالا مثل مثل متغیرها که می تونستیم محدوده دسترسی رو مشخص کنیم می تونیم محدوده دسترسی constها رو هم مشخص کنیم(مثلا private, public یا ... باشه)

  private static final int BACK_MENU=1;
پاسخ به سوال 
ابراهیم  11 سال پیش
+2 0

ممنون حسین جان بابت جواب .
یک نکته ای هست ان هم این که ویژگی که باعث می شنه تنها هنگام تعریف اولیه ی یک متغیر متونیم به او مقدار بدهیم از کلمه ی کلیدی final می یاد یعنی اگر ما از کلمه ی کلیدی static استفاده نکنیم هم همین ویژگی را داریم. از استتیک استفاده می کنیم تا مثلا اگر محدوده ی دید protected تعریف شده باشد این امکان را داشته باشیم که در کلاس extend  شده از کلاس اولیه بتونیم بگیم ParentClass.CONST حالا سوال من این هست که اگر ما ویژگی static  را به یک متغیر می دهیم تا بتوانیم از ان در کلاس های دیگر استفاده کنیم عملا این امکان را با تعیین محدوده ی دید به حالت private از بین برده ایم .این قسمت هست که من در موردش سوال دارم ممنون می شم من را راهنمایی کنید.

پاسخ به سوال 
کاشی زاده  11 سال پیش
+6 0

در مورد Final همونطور که دوستمون هم اشاره داشتند برای زمانی استفاده میشه که قرار نیست یک متغیر به هیچ عنوان تغییر کنه و در ابتدا یکبار initial میشه .

در رابطه با static یکی از کاربرد هاش دسترسی به متد ها و یا فیلد های استاتیک در همه جا هست.

اما یکی دیگر از ویژگی های مهم در static این هست که ما میتونید مثلا یک آرایه رو به صورت static در بیاریم و مقادیری که توش ریخته میشه در حافظه رم باقی میمونه مثل G.inflater یک بار این متغیر مقدار دهی میشه و دیگه نیازی به ساختن اون نیست و تا زمانی که اپلیکیشن شما در حال اجرا هست این متغیر باقی میمونه .

0 0
خیلی ممنون بابت پاسخ محمد حسین من دو تعریف مختلف می کنم شما بی زحمت بگید کدام درست است ممنون. 1- اگر ما بخوایم یک کلاس ایجاد کنیم که برروی رم گوشی تازمانی که ان اپ بر روی گوشی نصب است اطلاعاتش باقی بماند کلاس را singleton تعریف می کنیم منظور شما اینکه اگر ما به طور مثال فیلدی را static تعریف در رم می ماند قابلیت مانند استیک است؟ 2-متغیر هایی که به طور مثال در یک اکتیویتی بهشان بخشی از رم را اختصاص می دهیم ایا وقتی از ان اکتیویتی به اکتیویتی دیگری می رویم ان رم اختصاص داده شده گرفته می شود ؟ (سوال اول) که در صورت درست بودن سوال اول ان وقت می توان این گونه استنباط کرد که اگر بخواهیم بعد از رفتن از یک اکتیویتی فیلدی به طور مثا حافظه ای که بهش اختصا داده شده از بین نرود از static استفاده می کنیم. که باز هم سوالی پیش می اید وقتی قرار است من فیلدی را private تعریف کنم پس تنها در همان اکتیویتی از ان استفاده می کنم در نتیجه لزومی ندارد که بخواهم بعد از رفتن از ان اکتیویتی و تا زمانی که برنامه در حال اجرا می باشد حافظه ای به ان اختصاص داده شود؟ ممنون (10 سال پیش)
+3 0
ببنید علت اینکه متغیر استاتیک در حافظه میمونه این هست که کاری به کلاسش نداره و اگر شما کلاسش رو 100 بار هم از نو بسازید اون متغیر ثابت هست . سینگلتون هم یک دیزاین پترن هست . تاز زمانی که متغیر شما مورد استفاده باشه روی حافظه میمونه استاد در مورد جاوا گاربیج توضیحاتی رو دادن و میتونید اون بخش در آمزوش ترد هست رو مطالعه کنید . (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .