Obyekt konstruktsiyasi.
Java dasturlash tilida obyektlar “heap” nomli tizim xotirasida joylashadi. Boshqa dasturlash tillaridan farli o‘laroq Java obyektlarni xotiraga joylashtirish va o‘chirishni avtomatik ravishda bajaradi. Yangi obyekt yaratilganda unga xotiradan kerakli joy ajratiladi. Obyekt kerak bo‘lmay qolganda u Javaning maxsus “garbage collector” yordamida o‘chirilib tashlanadi.
Obyekt new operatori yordamida yaratiladi klass andozasi asosida yaratiladi. Masalan,quyidagi klass berilgan bo‘lsin:
public class Kitob
{
String kitobNomi = “1001 kecha”;
int varoqlarSoni = 324;
String muqovasi = “Qattiq”;
public void getKitobNomi()
{
return kitobNomi;
}
}
Ushbu klass andozasi asosida yangi obyekt quyidagicha yaratiladi:
Kitob k = new Kitob();
Ya’ni Kitob qiymatini qabul qiluvchi k o‘zgaruvchisiga new operatori yordamida yangi Kitob obyekti yaratilib biriktirilgan.
Java dasturlash tilida obyektlar obyekt konstruktori yordamida yaratiladi. Konstruktor klass ichida joylashgan, klass bilan bir xil nomga ega va qiymat qaytarmaydigan maxsus metod xisoblanadi. Ushbu maxsus metod xar doim yangi klass na’munasi, ya’ni obyekt, yaratilganda chaqiriladi. Boshqa metodlar singari konstruktorlar qiymat qabul qilishi va qayta e’lon qilinishi xam mumkin. Masalan,
public class Avtomobil
{
int tezlig;
public Avtomobil()
{
this.tezlig = 200;
}
public Avtomobil(int t)
{
this.tezlig = t;
}
}
Dasturda Avtomobil ikkita, qiymat qabul qilmaydigan va qiymat qabul qiladigan konstruktorga ega. Obyekt yaratilayotganida konstruktor argumentiga qarab kerakligi ishgatushiriladi. Masalan,
Avtomobil a = new Avtomobil();
Avtomobil b = new Avtomobil(250);
Birinchi xolatda a o‘zgaruvchiga biriktirilgan Avtomobil obyektini tezlik o‘zgaruvchisi 200 qiymatga ega bo‘ladi. Ikkinchi xolatda b o‘zgaruvchisiga biriktirilgan Avtomobil obyektini tezlik o‘zgaruvchisi 250 qiymatiga ega bo‘ladi.
Agar klassda xech qanday konstruktor berilmagan bo‘lsa kompilyator avtomatik ravishda qiymat qabul qilmaydigan konstruktorni qo‘shib beradi. Ya’ni,
public class Avtomobil
{
int tezlik;
public void getTezlik()
{
return tezlik;
}
}
dasturi quyidagi dastur bilan bir xil
public class Avtomobil
{
int tezlik;
public Avtomobil()
{
}
public void getTezlik()
{
return tezlik;
}
}
Obyekt destruktsiyasi.
Yuqoridagi bo‘limda aytilganidek obyektlar “heap” tizim xotirasida joylashadi. Boshqa manbalar singari tizim xotirasi xam chegaraga ega. Demak, obyektlar bilan ishlash mobaynida xotirada joyni tejash maqsadida keraksiz obyektlarni muntazam o‘chirib turish kerak. Aksariyat dasturlash tillarida dasturchi keraksiz obyektlarni ochirishni o‘zi nazorat qilishi va amalga oshiruvchi dastur kodini tuzishi kerak. Java dasturlash tili keraksiz obyektlarni ochirishni avtomatik tizimiga ega bo‘lib u keraksiz obyektlarni to‘plash tizimi deyiladi.
Agar obyekt dasturning biron bir o‘zgaruvchisi tomonidan ssilkaga ega bo‘lmasa ushbu obyekt keraksiz xisoblanadi va keraksiz obyektlarni to‘plash tizimi tomonidan o‘chiriladi. Ushbu tizim obyektlarni ssilkalarini muntazam tekshirib turadi va ssilkasi qolmagan obyektlarni o‘chirish uchun belgilaydi va o‘chiradi, o‘chirilgan obyektlar egallagan xotira manbalari tizimga qaytariladi.
Masalan,
Avtomobil a = new Avtomobil();
a = null;
Dastur kodining birinchi qatorida Avtomobil obyekti yaratilib u a o‘zgaruvchisi tomonidan ssilka qilinmoqda. Ikkinchi qatorda a o‘zgaruvchisi tomonidan Avtomobil obyektiga qilinayotgan ssilka bekor qilingan. Ushbu qator bajarilgandan keyin Avtomobil obyekti ssilkasiz qolib keraksiz obyektga aylanadi va keraksiz obyektlarni to‘plash tizimi tomonidan o‘chiriladi.
Ichki klasslar.
Shu vaqtgacha ko‘rilgan barcha klasslar yuqori darajadagi klasslar xisoblanadi. Java dasturlash tili klasslarni boshqa klass ichida yoki metod ichida e’lon qilish imkoniyatini beradi.
Ushbu klasslar ichki klasslar deb ataladi.
Masalan:
class Kompyuter{
class Xotira
{
…
}
}
Yuqoridagi misolda Xotira klassi Kompyuter klassini ichki klassi xisoblanadi. Ichki klass, boshqa klass a’zolari singari, u e’lon qilingan qamrov darajasida klass a’zolariga murojaat qilishi mumkin. O‘z navbatida ichki klass u e’lon qilingan klass yoki metod a’zosi xisoblanadi.
Masalan:
class Kompyuter{
class Xotira{
…
}
void amalBajarish(){
…
}
}
Yuqoridagi misolda Xotira ichki klassi Kompyuter klassi a’zosi bo‘lgan amalBajarish() metodini chaqirishi mumkin. Yoki amalBajarish() metodi Xotira klassi andozasi asosida obyekt yaratishi mumkin.
Boshqa klasslar singari ichki klasslar yuqori darajali klasslar tomonidan murojaat qilinishi xam mumkin. Lekin ushbu murojaatni amalga oshirish uchun murojaat qiluvchi ichki klass joylashgan yuqori darajali klassga ega bo‘lishi kerak. Masalan, Kompyuter klassi tashqarisidan Xotira klassi andozasi asosida obyekt yaratish uchun Kompyuter obyektiga ega bolish kerak.
Kompyuter k = new Kompyuter();
Kompyuter.Xotira x = k.new Xotira();
Yuqoridagi misolning birinchi qatorida Kompyuter qiymatini qabul qiluvchi k
o‘zgaruvchisiga yangi Kompyuter obyekti yaratilib biriktirilgan. Ikkinchi qatorda Kompyuter
klassining ichki klassi bo‘lgan Xotira qiymatini qabulqiluvchi x o‘zgaruvchisiga yangi Xotira
obyekti yaratilib biriktirilgan.
Ichki klassni lokal a’zo sifatida metod ichida xam e’lon qilish mumkin. Masalan:
class Kompyuter
{
void amalBajarish()
{
class Xotira()
{
…
}
}
}
Yuqoridagi misolda Xotira klassi amalBajarish() metodining lokal a’zosi sifatida metodning boshqa a’zolariga yoki Kompyuter klassining a’zolariga murojaat qilishi mumkin. Ammo, Kompyuter klassining a’zolari Xotira klassi metodning lokal a’zosi bo‘lganligi sababli unga murojaat qila olmaydi.