Metodlar klass tanasida joylashadi. Ular lokal o’zgaruvchilar va boshqa Java ifodalarini o’z ichiga oladi va ushbu o’zgaruvchilar metod chaqirilganda ishga tushiriladi. Metodlar ularni chaqirgan ifodaga qiymat qaytarishi mumkin. Qaytariladigan qiymat sodda qiymatlar, o’zgaruvchi yoki void, xech qanday qiymat qaytarilmaydi, bo’lishi mumkin. Metod e’lon qilinganda qaytariladigan qiymat metod nomidan oldin ko’rsatilishi kerak. Metodlar qiymat qabul qilishi xam mumkin va ushbu qiymat chaqiruvchi tomonidan beriladi. Metod e’lon qilinganda qabul qiladigan qiymat metodni qavslari ichida ko’rsatiladi.
Masalan:
class ArifmetikQiymat
{int xQiymat;
int yQiymat;
double xisoblash(int x, int y)
{double arifQiymat = (x + y)/2;
return arifQiymat;
}}
Ushbu dasturda ArifmetikQiymat klassida ikkita butun sonlarni (int x va int y) qabul qiluvchi xisoblash() metodi e’lon qilingan. Ushbu metod ratsional (double) qiymatni return kalit so’zi orqali chaqiruvchi ifodaga qiymat sifatida qaytaradi.
xisoblash() metodi ichida arifQiymat nomli o’zgaruvchi e’lon qilingan. Metod ichida e’lon qilingan o’zgaruvchilar lokal o’zgaruvchilar deyiladi. Lokal o’zgaruvchilarni klass o’zgaruvchilardan farqi shundaki, ular vaqtincha bo’lib metod bajarilguncha axamiyatga ega.Metod bajarilib bo’lingandan so’ng lokal o’zgaruvchilar o’z axamiyatini yo’qotadi. Bundan tashqari lokal o’zgaruvchilariga metod tashqarisidan murojaat qilib bo’lmaydi.
Java dasturlash tilida bitta klass ichida bir xil nomga ega bir nechta metodlarni e’lon qilish xam mumkin. Ushbu printsip metodni qayta e’lon qilish deb nomlanadi. Faqatgina qayta e’lon qilingan metod xar xil son va turdagi argumentlarni qabul qilishi shart. Metod chaqirilganda kompilyator metod qabul qiladigan argumentlariga qarab ushbu metodlar ichidan kerakligini ishga tushiradi. Masalan,
public class QabulQilinganQiymat
{public void qiymat(String s)
{System.out.println(“birinchi metod”);
System.out.println(“qabul qilingan qiymat - ” + s);
}public void qiymat(int x)
{System.out.println(“ikkinchi metod”);
System.out.println(“qabul qilingan qiymat - ” + x);
}}
dasturida
qiymat(“tekshiruv”);
metodi chaqirilsa dastur ekranga
birinchi metod
qabul qilingan qiymat – tekshiruv
chiqarib beradi. Agar,
qiymat(5);
metodi chaqirilsa dastur ekranga
ikkinchi metod
qabul qilingan qiymat – 5
chiqarib beradi. 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 ishga tuhiriladi. 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.