آموزش دونه:مرجع آموزش

اشاره گرها در جاوا (Java Pointer) آموزش برنامه نویسی جاوا Java

اشاره گرها

Java Pointer

اگر پیش از این ، با زبان هایی مانند c سروکار داشتید ، می دونید که توی c یک مفهوم نسبتا گیج کننده داریم به نام اشاره گر (pointer) . خوشبختانه توی جاوا از کار کردن مستقیم با اشاره گر ها خبری نیست.

اما چون اساسا دسترسی به اشیا مدل call by reference هست ، باید این مفهوم رو بدونید.

مثال ساده زیر رو در نظر بگیرید :

Java Pointer

بعد از اجرای این دستورات ساده ، a , b  هر کدوم چه مقادیری خواهند داشت ؟

ساده است . a برابر خواهد بود با ۱۲  و b با ۲۵

اگر جواب درست داده باشید ، یعنی می دونید که در خط چهارم ، عبارت b = a به این معنی نیست که a  و  b  یک چیز هستند ، بلکه صرفا به این معنی است که محاسبه می کنه مقدار سمت راست چند است ( که در این حالت ۱۲ است ) بعد این مقدار رو به b نسبت میده ، کاملا مستقل از اینکه این مقدار از کجا اومده.

در نتیجه a  و  b  کاملا مستقل هستند.

اما در دنیای اشیا ، قضیه کاملا فرق می کنه. فرض کنید کلاسی به نام Person داریم که فیلدی به نام age داره. کد زیر رو در نظر بگیرید :

Java Pointer

بعد از اجرای این کد ، سن p1 چقدر خواهد بود ؟ ۲۰ ؟

نه !! بعد از اجرای این کد ، سن p1 و p2 و ۱۲ خواهد بود !!

عملگر = ، بر خلاف اون اتفاقی که برای اعداد ( و بقیه انواع اولیه ، مانند char و boolean) می افته ، یک کپی از مقدار سمت راست تولید نمی کنه.

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

زمانی که یک متغیر ساده (عددی) رو تعریف می کنید ، یک قسمت از RAM یا حافظه ، به اون متغیر اختصاص پیدا می کنه. این متغیر مستقیما به اون بخش از حافظه مرتبط شده. هر عددی که توی اون بخش از حافظه بنویسید ، مقدار متغیر همون خواهد بود.

اما در مورد اشیا قضیه فرق می کنه.

زمانی که یک شی رو new می کنید ، یک بخش از حافظه رو به اون شی نسبت دادید، زمانی که متغیری از جنس کلاس رو تعریف می کنید ، (مانند Person p1) یک بخش دیگه از حافظه رو به p1 اختصاص دادید.

در واقع وقتی که این دستور رو اجرا می کنید :

Java Pointer

اول شی ساخته می شه و در حافظه قرار می گیره ، بعد آدرس اون نقطه از حافظه توی p1 قرار می گیره.

وقتی می گید p2 = p1 ، اتفاقی که می افته اینه که آدرسی که درون p1 قرار داره ، درون p2 هم ریخته می شه. این به این معنیه که اگه اون شیئی رو که p1 بهش اشاره داره تغییر بدید ، متوجه می شید که p2 هم تغییر کرده ، چون p2 هم به همون شی اشاره داره.

مثالی که از این قضیه توی دنیای واقعی می شه زد ، اینه  :

کارت دانشجویی شما به شما اشاره داره ، شناسنامه شما هم همینطور. اگر نام شما عوض بشه ، شناسنامه و کارت دانشجویی شما هم باید عوض بشه.

مثال بهتری که میشه زد ، shortcut ها در windows هستند.

شما از یک برنامه می تونید هزاران shortcut بسازید که همه اونها دقیقا به یک برنامه اشاره دارند.

اگر اون برنامه رو پاک کنید ، تمام shortcut ها از بین می رند. نکته جالب اینجاست که این برنامه است که حافظه شما رو اشغال می کنه ، نه shortcutها ، اگر میلیون ها shortcut هم بسازید ، تغییر آنچنانی توی حافظه شما اتفاق نمی افته.

 

آموزش کامل زبان برنامه نویسی جاوا در برنامه اندرویدی ما:

دانلود نرم افزار اندرویدی آموزش  زبان برنامه نویسی جاوا 

مطالب مرتبط