رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

مفهوم دقیق استاتیک در جاوا


پست های پیشنهاد شده

سلام و خسته نباشید.
بنده در حال یادگیری جاوا هستم و یه مشکلی در مفهوم استاتیک داشتم که امیدوارم از راهنمایی دوستان بهره ببرم.
در یک کلاس میتونیم یه سری توابع و متغیر اون کلاسو استاتیک تعریف کنیم و اونارو متعلق به کلاس و مستقل از شی و نمونه اون کلاس کنیم و بقیه متغیر و توابع غیر استاتیک هم مربوط به نمونه کلاس میشن. البته اگه درست فهمیده باشم.
سوالم اینجاس چرا اصلا میایم شی میسازیم وقتی میتونیم خیلی راحت با اسم صدا زدن اسم کلاس در کلاس دیگه ای به توابع استاتک دسرسی داشته باشیم؟ خب میایم همرو استاتیک تعریف میکنیم راحت استفاده میکنیم.مثل کلاس با متد اصلی (مین) که استاتیک تعریف شده.یا کلاس سیستم یا کلاس ریاضی که اسمشونو میزنیم و با زدن نقطه (.) به تموم توابعش دسرسی پیدا میکنیم. اما یک کلاس مثل کلاس ورودی گرفت (اسکنر) اول باید بیایم شی اونو بسازیم و بعد از روی شی به تابع هاش دسرسی پیدا کنیم. دلیل این کار چیه؟ ممنون میشم پیچیده توضیح ندین و مفاهیم کامل استاتیک که شاید تو متن بالا اصلا بهش اشاره نکرده باشم رو بهم توضیح بدین..پیشاپیش ممنون از راهنمایی همه دوستان و عذرخواهی میکنم اگه سوالم مبتدیانست

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 5 ساعت قبل، mmohsenm گفته است :

سلام و خسته نباشید.
بنده در حال یادگیری جاوا هستم و یه مشکلی در مفهوم استاتیک داشتم که امیدوارم از راهنمایی دوستان بهره ببرم.
در یک کلاس میتونیم یه سری توابع و متغیر اون کلاسو استاتیک تعریف کنیم و اونارو متعلق به کلاس و مستقل از شی و نمونه اون کلاس کنیم و بقیه متغیر و توابع غیر استاتیک هم مربوط به نمونه کلاس میشن. البته اگه درست فهمیده باشم.
سوالم اینجاس چرا اصلا میایم شی میسازیم وقتی میتونیم خیلی راحت با اسم صدا زدن اسم کلاس در کلاس دیگه ای به توابع استاتک دسرسی داشته باشیم؟ خب میایم همرو استاتیک تعریف میکنیم راحت استفاده میکنیم.مثل کلاس با متد اصلی (مین) که استاتیک تعریف شده.یا کلاس سیستم یا کلاس ریاضی که اسمشونو میزنیم و با زدن نقطه (.) به تموم توابعش دسرسی پیدا میکنیم. اما یک کلاس مثل کلاس ورودی گرفت (اسکنر) اول باید بیایم شی اونو بسازیم و بعد از روی شی به تابع هاش دسرسی پیدا کنیم. دلیل این کار چیه؟ ممنون میشم پیچیده توضیح ندین و مفاهیم کامل استاتیک که شاید تو متن بالا اصلا بهش اشاره نکرده باشم رو بهم توضیح بدین..پیشاپیش ممنون از راهنمایی همه دوستان و عذرخواهی میکنم اگه سوالم مبتدیانست

علت اینکه شما بدون گرفتن نمونه میتونید از کلاس های استاتیک استفاده کنید اینه که هرچیزی که شما از نوع استاتیک تعریف میکنید با شروع برنامه اونا هم اجرا میشن و درحافظه به صورت آماده به کار قرار میگیرن درحالی که بقیه ی کلاس ها فقط جایی که صدا زده میشن حافظه میگیرن و بعدش از حافظه خارج میشن

اما نوع های استاتیک تا برنامه بازه اونا هم بازن به همین علت مثلا متغیری که از نوع استاتیک در اول برنامه مقداردهی کردین تا آخر برنامه هرجا خواستید میتونید صداش بزنید

اما پاسخ سوال:

همونطور که گفتم نوع استاتیک حافظه میگیره و اگر این کلاس هاتون زیاد بشن فضای زیادی از حافظه رو اشغال و در عملکرد برنامه تاثیر منفی دارن. فقط چیزایی رو استاتیک تعریف کنید که نیاز مبرم بهشون دارید

ویرایش شده توسط mehrdadmmb2
لینک ارسال
به اشتراک گذاری در سایت های دیگر
در ۱ ساعت قبل، mehrdadmmb2 گفته است :

علت اینکه شما بدون گرفتن نمونه میتونید از کلاس های استاتیک استفاده کنید اینه که هرچیزی که شما از نوع استاتیک تعریف میکنید با شروع برنامه اونا هم اجرا میشن و درحافظه به صورت آماده به کار قرار میگیرن درحالی که بقیه ی کلاس ها فقط جایی که صدا زده میشن حافظه میگیرن و بعدش از حافظه خارج میشن

اما نوع های استاتیک تا برنامه بازه اونا هم بازن به همین علت مثلا متغیری که از نوع استاتیک در اول برنامه مقداردهی کردین تا آخر برنامه هرجا خواستید میتونید صداش بزنید

اما پاسخ سوال:

همونطور که گفتم نوع استاتیک حافظه میگیره و اگر این کلاس هاتون زیاد بشن فضای زیادی از حافظه رو اشغال و در عملکرد برنامه تاثیر منفی دارن. فقط چیزایی رو استاتیک تعریف کنید که نیاز مبرم بهشون دارید

با این اوصاف 1- پس چرا اصلا استاتیک تعریف میکنیم وقتی میشه ازش نمونه ساخت و از روی نمونه بهش دسترسی پیدا کرد؟

2- برنامه ای که بدونیم یه سری از کلاسها و توابعش حتما مورد نیاز و استفاده میشه بهتر نیست استاتیک باشه تا راحت تر بهش دسرسی پیدا کنیم اما اونهایی که بستگی به شرایط اجرا و کاربرو ... داره رو نمونه بسازیم(چون بهرحال میدونیم اجرا میشه اون تابع و فضا بهش تعلق میگیره)؟

3- جز این دیگه استاتیک و نمونه چه مزیت هایی نسبت به هم دارن؟ یکیش که حافظه بود. تو مورد دوم که مثلا توابع صد در صد استفاده شده استاتیک باشه تا شی بسازیم رو حجم کلی برنامه در حین اجرا و قبل اون و همچنین سرعت و بهینه بودن چه تاثیری داره؟منظور مقایسه حجم برنامه یا  سرعت اجرا برنامه و ...  در این دو حالت هست. و مقایسه تو خیلی قسمت هایی که بنده به عنوان یه  مبتدی اشاره نکردم بهش

ویرایش شده توسط mmohsenm
لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 4 ساعت قبل، mmohsenm گفته است :

با این اوصاف 1- پس چرا اصلا استاتیک تعریف میکنیم وقتی میشه ازش نمونه ساخت و از روی نمونه بهش دسترسی پیدا کرد؟

2- برنامه ای که بدونیم یه سری از کلاسها و توابعش حتما مورد نیاز و استفاده میشه بهتر نیست استاتیک باشه تا راحت تر بهش دسرسی پیدا کنیم اما اونهایی که بستگی به شرایط اجرا و کاربرو ... داره رو نمونه بسازیم(چون بهرحال میدونیم اجرا میشه اون تابع و فضا بهش تعلق میگیره)؟

3- جز این دیگه استاتیک و نمونه چه مزیت هایی نسبت به هم دارن؟ یکیش که حافظه بود. تو مورد دوم که مثلا توابع صد در صد استفاده شده استاتیک باشه تا شی بسازیم رو حجم کلی برنامه در حین اجرا و قبل اون و همچنین سرعت و بهینه بودن چه تاثیری داره؟منظور مقایسه حجم برنامه یا  سرعت اجرا برنامه و ...  در این دو حالت هست. و مقایسه تو خیلی قسمت هایی که بنده به عنوان یه  مبتدی اشاره نکردم بهش

جواب هر سه تا سوال تو جواب هست

1- استاتیک مقدارش تو کل برنامه قابل خوندنه مثلا اول برنامه مقدارش یکه و 100 تا اکتیویتی باز و بسته میشه ام شما تو صفحه صدم هم میتونید این مقدار یک رو بخونید.

مثال دیگه اینکه شما دارید با وب سرویس کار میکنید اول برنامه توکن میگیرید. چون توکن چیزیه که تو همه ی ریکوئست ها باید ارسال بشه همون اول میریزید تو یه نوع استاتیک و همه جا بهش دسترسی دارید.

2- فقط نیاز شما مشخص میکنه که کی و کجا باید از چی استفاده کنید

3- این جور کلاس ها و متغیر ها رم زیادی اشغال میکنن

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 1 ساعت قبل، mehrdadmmb2 گفته است :

جواب هر سه تا سوال تو جواب هست

1- استاتیک مقدارش تو کل برنامه قابل خوندنه مثلا اول برنامه مقدارش یکه و 100 تا اکتیویتی باز و بسته میشه ام شما تو صفحه صدم هم میتونید این مقدار یک رو بخونید.

مثال دیگه اینکه شما دارید با وب سرویس کار میکنید اول برنامه توکن میگیرید. چون توکن چیزیه که تو همه ی ریکوئست ها باید ارسال بشه همون اول میریزید تو یه نوع استاتیک و همه جا بهش دسترسی دارید.

2- فقط نیاز شما مشخص میکنه که کی و کجا باید از چی استفاده کنید

3- این جور کلاس ها و متغیر ها رم زیادی اشغال میکنن

پس در واقع باید موقعی که مجبور به استفاده از استاتیک شدم و چاره ای جز استفادش نداشتیم ازش استفاده کنم تا فضا بهینه تر شه و با استفاده بی دلیل ازش عملا سرعت برنامرو از بین نبریم .درسته؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

static  :

وقتی شما یک متغیر یا متد را static ایجاد میکنید بدون اینکه نیاز به new کردن کلاس مورد نظر داشته باشید میتوانید به مقدار متغیر و همچنین به متد دسترسی پیدا کنید

 

final هم برای مقدار دهی یک متغیر میباشد که فقط یکبار میتوان به آن مقدار داد

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در ۱ ساعت قبل، Farzad Sarseifi گفته است :

static  :

وقتی شما یک متغیر یا متد را static ایجاد میکنید بدون اینکه نیاز به new کردن کلاس مورد نظر داشته باشید میتوانید به مقدار متغیر و همچنین به متد دسترسی پیدا کنید

 

final هم برای مقدار دهی یک متغیر میباشد که فقط یکبار میتوان به آن مقدار داد

اینو متوجه ام.بحث دلیل استفاده هست یا دلیل عدم استفاده . به طور جامع مثلا بحث سرعت و حافظه که دوستمون بیان کردن

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در 4 ساعت قبل، mmohsenm گفته است :

اینو متوجه ام.بحث دلیل استفاده هست یا دلیل عدم استفاده . به طور جامع مثلا بحث سرعت و حافظه که دوستمون بیان کردن

هنگامی که یک متغیر یا متد استاتیک دارید دیگر  نیازی به new کردن کلاس را ندارید و حافظه کمتری مصرف میگردد

لینک ارسال
به اشتراک گذاری در سایت های دیگر
در در 1396/10/13, 22:51:39، Farzad Sarseifi گفته است :

هنگامی که یک متغیر یا متد استاتیک دارید دیگر  نیازی به new کردن کلاس را ندارید و حافظه کمتری مصرف میگردد

برعکس شد که. آخر نفهمیدیم متد یا متغیر استاتیک همون اول اجرا میشه پس فضا بیشتر استفاده میشه یا وقتی شی سازی میکنیم فضا بیشتر مصرف میشه؟ اگه حالت اوله پس اصلا چرا شی میسازیم ازش همون استاتیک میکنیم و استفاده میکنیم.چه مشکلی داره؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 1 سال بعد...
  • 2 ماه بعد...

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...