PDA

View Full Version : آیا در جاوا ارجاع داریم؟



arezoo200
یک شنبه 01 اردیبهشت 1392, 15:48 عصر
آیا در جاوا ارجاع داریم؟ نه ارجاع به شیء !!
مثلا در C# برای ارجاع از ref استفاده میکنیم و در C از & و * استفاده میکنیم.آیا برای این کار در کلاس main راهه حلی هست؟

javaphantom
یک شنبه 01 اردیبهشت 1392, 16:09 عصر
آیا در جاوا ارجاع داریم؟ نه ارجاع به شیء !!
مثلا در C#‎ برای ارجاع از ref استفاده میکنیم و در C از & و * استفاده میکنیم.آیا برای این کار در کلاس main راهه حلی هست؟

در جاوا همه چیز call by value هست. ارجاع یا pointer یا ref ندارد

arezoo200
یک شنبه 01 اردیبهشت 1392, 16:29 عصر
بله میدونم همش با مقداره ولی آیا میشه شرایطی رو فراهم کرد تا این کار رو کرد؟
در جاوا همه چیز call by value هست. ارجاع یا pointer یا ref ندارد

spiderman200700
یک شنبه 01 اردیبهشت 1392, 22:04 عصر
خود جاوا براتون این شرایط رو فراهم کرده.
وقتی شی ای رو به متد یا جای دیگه ای میفرستید ، ظاهرا دارید خود شی رو می فرستید و از ارجاع استفاده میکنید، ولی در اصل این جاواس که با استفاده call by value این شرایط رو فراهم کرده.

esmaeilbf
یک شنبه 01 اردیبهشت 1392, 22:21 عصر
دو نوع داده در جاوا وجود داره :
1-primitive Type
2-reference object
لطفا درباره ی این موارد توضیحاتی دهید، خصوصا دومی .

بهزاد علی محمدزاده
یک شنبه 01 اردیبهشت 1392, 23:01 عصر
103165


درباره عملکرد Refrence

esmaeilbf
یک شنبه 01 اردیبهشت 1392, 23:08 عصر
خیلی ممنونم فقط در موردتصویر مقداری توضیح میدادین عالی میشد و مثلا در مورد معایب و مزایای پوینتر و ref و دلیل حذف پوینتر ها در جاوا بیشتر توضیح میدادین

بهزاد علی محمدزاده
دوشنبه 02 اردیبهشت 1392, 00:25 صبح
دلایل مختلفی وجود داره ، C برای low- level programming به pointer نیاز داره . جاوا به منظور دیگه ایی طراحی شده ، و مساله مدیریت حافظه رو داره . اگر با C برنامه نوشته باشید ، وقتی یک متغیر رو تعریف می کنید ، و می خواید که مثلا مقدار 0 داشته باشه ، صریحا بهش مقدار 0 میدین چون ممکنه مکانی رو که به خودش اختصاص داده بصورت پیش فرض دارای یه مقداری باشه ! یه جایی از حافظه است دیگه ...

این چه معنایی می تونه داشته باشه ؟ شاید به این معناست که برنامه ها بعد از خاتمه مقادیری رو در حافظه به جای میذارن !!! و شما می تونید به اون مقادیر به جای مانده در حافظه دسترسی داشته باشید ... جاوا مدیریت حافظه داره و داده هایی که هیچ رفرنسی به اونها وجود نداشته باشه رو از بین می بره . به این دلیل جاوا رو یک زبان Safe نامیدن .

بهزاد علی محمدزاده
دوشنبه 02 اردیبهشت 1392, 01:01 صبح
103171

عملکرد ref در سی شارپ به این صورت هست . بقیه صحبت ها رو میذارم فردا تا ببینم تفاوت سی شارپ و جاوا در ارسال پارامتر چه هست .

cups_of_java
دوشنبه 02 اردیبهشت 1392, 10:58 صبح
دو نوع داده در جاوا وجود داره :
1-primitive Type
2-reference object
لطفا درباره ی این موارد توضیحاتی دهید، خصوصا دومی .

ما کلن سه نوع متغیر داریم تو زبان های برنامه نویسی:
۱. متغیر های معمولی (Valueها)
۲. متغیر های اشاره گر
۳. متغیر های ارجاع (Reference)

اولی و دومی که واضح هستند براتون. سومی هم متغیر هایی هستند که در واقع تو دلشون مثل اشاره گر کار می کنند ولی مثل متغیر های معمولی دیده میشن تو زبان برنامه نویسی. یعنی محدود شده تر هستند و شما با اون ها مثل یک متغیر معمولی کار می کنید در حالی که efficient تر از معمولی ها هستند. . در واقع واسه همین به وجود اومدن.
توی جاوا همون طور که دوستان هم گفتن به علت هدف طراحی این زبان، اشاره گر ها حذف شدند (اشاره گر ها یکی از مهمترین عوامل پیچیدگی کد و ایجاد خطا و سخت شدن رفع ابراد در کد هستند و تجربه نشون داده که جز در برنامه نویسی های سیستمی و سطوح پایین کاربردی ندارن) همونطور که گفتن Referenceها همون کار اشاره گر ها رو براتون می کنند اما به طور محدود.
توی جاوا تمام مقادیر اولیه (که از نوع کلاس نیستن) مثل اعداد (int, float, double,...) مقادیری هستند که از نظر حافظه جای کمی اشغال می کنند و فضاشون هم فیکس هست برای همین اینا به صورت Value (متغیر های معمولی) استفاده می شن.
و اما تمام متغیر هایی که از نوع یک کلاس باشن (شی باشن یعنی) به صورت ارجاع هستن (Reference) یعنی اون متغیر واقعن آدرس اون شی در حافظه رو داره ولی شما این رو نمی بینی.
حالا همیشه توی جاوا برای پاس کردن آرگومان ها فقط از روش Call-by Value استفاده می شه. نتیجه این میشه که شما وقتی یه Primitive توی پارامتر هاتون باشه مقدارش کپی میشه (یعنی شما نمی تونی یه int رو به صورت ارجاع بفرستی تو یه متد و تو اون متد مقدار اون متغیر که بیرون متد بوده تغییر کنه (مثل تابع کلاسیک swap)! و این اصلن بد نیست. چون تغیر دادن آرگومان های ورودی یه تابع به صورت ارجاع اصلن درست نیست و منشا کثیف شدن کدتون هست.
و اما وقتی یه شی توی پارامتر ها باشه باز هم موقع ارسال به متد مقدارش کپی می شه ولی چون reference هستن اشیا تو جاوا پس اون آدرسه کپی شده در واقع! یعنی انگار Call by Reference صورت گرفته در واقع! برای اشیا هم اصولن تو زبان های دیگه هم ما همینطور عمل می کردیم. اگه C++ کار کرده باشین اصولن کلاس ها (مثلن Student) رو اینطوری به عنوان پارامتر متد ها تعریف می کنیم:

f( const Student& s)
جاوا اومده تمام این کارای رایج رو براتون پیش فرض گرفته و شما نمی بینیدش (برای سادگی، بالا بردن سرعت کد زدن و امن بودن)