آنچه من از سر اول آموختم: زندگی مرجع شیء جاوا.

سلام و خوش آمدید! 🤗 همانطور که من سفر خود را برای یادگیری اصول جاوا ادامه می دهم سر اول جاوا، من به بخش جالبی رسیدم که معتقدم می تواند برای دیگران روشنگری باشد. به اشتراک گذاشتن آن در اینجا ممکن است باعث کنجکاوی و یادگیری شود. بیایید شروع کنیم!
نمای کلی
آیا تا به حال در نظر گرفته اید که یک مرجع شیء جاوا باشد؟ احتمالاً نه اما امروز ، بیایید بررسی کنیم که چگونه متغیرهای مرجع کار می کنند. به یک مرجع مانند یک کنترل از راه دور فکر کنید. این می تواند اشیاء مختلف را کنترل کند ، گاهی اوقات هنوز تنظیم نشده است (null
) ، و گاهی اوقات منجر به حذف اشیاء (جمع آوری زباله) می شود.
در این قطعه ، من سعی خواهم کرد که منابع مورد نظر جاوا را به روشی واضح توضیح دهم (امیدوارم 😃). فقط مثالهای مفید و برخی از لحظاتی که ناگهان چیزها معنا پیدا می کنند.
1. یک مرجع شیء دقیقاً چیست؟
در جاوا ، یک مرجع شیء شیء واقعی نیست. این شبیه به یک کنترل از راه دور است که به شما کمک می کند تا با یک شیء ذخیره شده در حافظه کار کنید. در اینجا یک مثال آورده شده است:
– من در کل جلسه به این کلاس اساسی مراجعه خواهم کرد
class Dog {
String name;
void bark() {
System.out.println(name + " says woof!");
}
public static void main(String[] args) {
Dog d = new Dog(); // 'd' is a reference to a Dog object
d.name = "Buddy";
d.bark(); // Buddy says woof!
}
}
در اینجا d
مرجع است این شامل شیء سگ نیست – فقط به جایی که شیء در حافظه وجود دارد اشاره می کند.
2. آیا یک مرجع شیء می تواند تغییر کند؟
بله یک مرجع می تواند به یک شیء متفاوت از همان نوع ، مانند یک ریموت جهانی که می تواند با تلویزیون های مختلف کار کند ، اشاره کند.
Dog dog1 = new Dog("Rex");
Dog dog2 = new Dog("Luna");
Dog myDog = dog1; // myDog refers to 'Rex'
myDog = dog2; // Now it refers to 'Luna'
در اینجا myDog
اول کنترل شده dog1
(rex) ، سپس به کنترل تغییر یافت dog2
(لونا). با این حال ، نمی تواند به یک شیء ماشین مراجعه کند. جاوا به شدت انواع را بررسی می کند.
Car myCar = new Car();
myDog = myCar; // ❌ Compilation Error! A Dog reference can't point to a Car.
3. چه اتفاقی می افتد که یک مرجع نهایی باشد؟
هنگامی که یک مرجع را به عنوان نهایی علامت گذاری می کنید ، نمی توانید آن را به یک شیء دیگر نشان دهید ، اما شیء آن که به آن اشاره می کند هنوز هم می تواند تغییر کند:
final Dog myDog = new Dog("Rocky");
myDog = new Dog("Bella"); // ❌ Error: Cannot reassign a final reference
myDog.name = "Charlie"; // ✅ Allowed! The object itself can change
این مانند داشتن یک ریموت است که فقط می تواند یک تلویزیون خاص را کنترل کند. شما می توانید کانال را تغییر دهید (خصوصیات شی را تغییر دهید) ، اما نمی توانید از آن با تلویزیون متفاوت استفاده کنید.
4. مرجع تهی مخوف
یک مرجع می تواند بدون اشاره به هر شیء وجود داشته باشد. به آن تهی گفته می شود ، و این یک حالت خالی است:
Dog myDog = null; // myDog exists, but points to nothing
myDog.bark(); // ❌ NullPointerException! myDog doesn't control anything
این بیشتر شبیه به کنترل از راه دور بدون تلویزیون است. هر دکمه ای را فشار دهید – هیچ چیز اتفاق می افتد.
برای جلوگیری از این کار:
- همیشه بررسی کنید که آیا یک مرجع قبل از استفاده از آن تهی است یا خیر.
- از ویژگی های اختیاری استفاده کنید (مانند اختیاری در جاوا 8+).
- منابع را به درستی تنظیم کنید.
5. هنگامی که منابع از بین می روند: جمع آوری زباله ها
اگر یک شیء به آن اشاره ای نداشته باشد ، جمع کننده زباله های جاوا حافظه را آزاد می کند. این آخرین اتصال به یک دستگاه قدیمی است – حذف می شود.
Dog dog1 = new Dog();
dog1.name = "Max";
dog1 = null; // Max is now unreachable and eligible for garbage collection
حتی بیشتر متاسفانه:
Dog dog1 = new Dog();
Dog dog2 = new Dog();
dog1.name = "Bolt"
dog2.name = "Fluffy";
dog1 = dog2; // Now Bolt is lost forever (unless another reference held it)
کی dog1
تغییر یافت تا به dog2'
شیء S ، اصل پیچ شیء آخرین مرجع خود را از دست داد. جمع آوری زباله های جاوا سرانجام این حافظه را پاک می کند.
بنابراین … به طور خلاصه …
مرجع شیء آسان نیست. شما تغییر می کنید ، خالی می شوید و گاهی رها می شوید. اما درک چگونگی کار منابع برای تسلط بر مدیریت حافظه جاوا مهم است.
بنابراین دفعه بعد که می نویسید Dog myDog = new Dog("Charlie");
، به یاد داشته باشید – شما یک سگ ایجاد نمی کنید. شما فقط یک کنترل از راه دور را در دست دارید که به یکی اشاره دارد.
به من اطلاع دهید که آیا این چیزی است که چند لحظه لامپ را به ارمغان می آورد. تا دفعه بعد ….. تشویق!