Java bir kund



Download 1,09 Mb.
bet16/24
Sana30.09.2022
Hajmi1,09 Mb.
#850991
1   ...   12   13   14   15   16   17   18   19   ...   24
Bog'liq
Java быстрый старт (1)

Konstruktor - bu sinf shablonidan ob'ektni "konstruksiya qilish" uchun ishlatiladigan kod bloki (usulga o'xshash ). Konstruktor nomi har doim sinf nomi bilan bir xil bo'ladi (bizning holatimizda xodimlar ) va odatda maydonlarni ishga tushirish uchun ishlatiladi.
sinf.
122 7 -bob. Obyektga yo‘naltirilgan dasturlash

Konstruktorning asosiy xususiyati shundaki, u bizning sinfimiz ob'ekti yaratilganda chaqiriladigan kodning birinchi blokiga aylanadi . Konstruktorning qolgan qismi boshqa usullar bilan deyarli bir xil. Biroq, konstruktor qiymatni
qaytarmaydi va uni e'lon qilishda void kalit so'zidan foydalanish shart emas.
Keling, Staff sinfi uchun konstruktorni e'lon qilishdan boshlaylik . Xodimlar sinfiga quyidagi parcha qo'shing :
ommaviy xodimlar (String nomi)
{
nameOfStaff = ism; System.out.println("\n" + nameOfStaff); System.out.println(" ");
}

Yuqoridagi misolda konstruktor parametr oladi


nomi bilan va nameOfStaff maydonini ishga tushirish uchun foydalanadi . Keyin ekranga nameOfStaff qiymatini chop etadi va uning tagiga qator chiziqlar bilan chizadi. Konstruktor boshqa hech narsa qilmaydi.
Ob'ektlarni "qurilish" uchun konstruktordan qanday foydalanish bo'l
keyinroq aytdi.

Keyin sinfimizga yana bir konstruktor qo'shamiz. Usullarda bo'lgani kabi , sinf turli imzolarga ega bo'lsa, bir nechta konstruktorga ega bo'lishi mumkin:


ommaviy xodimlar (String firstName, String lastName)


{ ""
nameOfStaff = firstName ++ familiya; System.out.println("\n" + nameOfStaff); System.out.println(" ");
}

    1. Misol yaratish 123


Ikkinchi konstruktor ikkita parametrni oladi - firstName va familiyasi. Birinchi qator ikkita satrni birlashtiradi va natijani nameOfStaff ga tayinlaydi. Keyingi ikkita satr ekranga nameOfStaff qiymatini bosib chiqaradi va uning tagiga qator defislar bilan chiziladi.
Konstruktor deklaratsiyasi ixtiyoriydir. Agar konstruktor e'lon qilinmasa, NetBeans avtomatik ravishda
standart konstruktorni yaratadi. Bu konstruksiya
torus hech qanday parametrlarni qabul qilmaydi va ishga
tushirilmagan barcha maydonlarni standart qiymatlar bilan ishga tushiradi - 0
yoki ma'lumotlar turiga qarab uning ekvivalenti. Misol uchun, raqamli ma'lumotlar turi uchun standart qiymat 0, mos yozuvlar turi uchun esa null (bu o'zgaruvchida hech qanday manzil saqlanmaydi degan ma'noni anglatadi).

7.3. INSTANSI YARATISH


Staff sinfi tugallangandan so'ng , ob'ektni yaratish uchun sinfdan qanday foydalanishni ko'rib chiqamiz . Bu jarayon instantsiya deb ataladi (ob'ektlar misollar deb ham ataladi ) .
Shuni eslatib o'tamanki, natijada olingan sinf quyidagilardan iborat
komponentlar:
dalalar
xususiy String nameOfStaff; xususiy final int hourlyRate = 30; xususiy int soatlar Ishlagan;
124 7 -bob. Obyektga yo‘naltirilgan dasturlash

Usullari
public void printMessage() public int accountPay()
public int accountPay(int bonus, int to'lov) ommaviy bekor qilish toÿplamiIshlagan vaqti(int soat) public int getHoursWorked()

Konstruktorlar


ommaviy xodimlar (String nomi)
ommaviy xodimlar (String firstName, String lastName)

Staff namunasi ObjectOrientedDemo sinfidagi main() usulida yaratiladi .


Namuna yaratish sintaksisi:
ClassName objectName = yangi ClassName(argumentlar);

Loyihalar oynasida ObjectOriented Demo.java fayl nomini ikki marta bosing va main() usulida jingalak qavslar ichiga quyidagi qatorlarni kiriting :


Staff1 = yangi xodimlar ("Piter"); staff1.setHoursWorked(160);
int pay = staff1.calculatePay(1000, 400);
"
System.out.println("To'lov = + to'lash);

Birinchi jamoa


Staff1 = yangi xodimlar ("Piter");

birinchi konstruktordan (bitta parametr bilan) personal1 misolini yaratish uchun foydalanadi.


Personal1 ob'ekti yaratilgandan so'ng , ob'ekt nomidan keyin nuqta operatoridan har qanday umumiy maydon yoki sinf usuliga murojaat qilishimiz mumkin.

    1. Misol yaratish 125


Xodimlar. Biz ObjectOrientedDemo sinfidan Staff sinfi komponentlariga kirishga harakat qilayotganimiz uchun nuqta operatori kerak . Ushbu operator har safar qo'ng'iroq qilmoqchi bo'lganingizda ishlatilishi kerak
boshqa sinfdagi maydon yoki usulga.

Agar joriy sinfdagi maydonlar yoki usullarga kirayotgan bo'lsangiz , sizga nuqta operatori kerak emas. Misol printPay() usulidan printMessage() usulini chaqirganda paydo bo'ladi . Nuqta operatori ishlatilmaydi, chunki ikkala usul ham bir sinfga tegishli.


Personal1 ob'ekti yaratilgandan so'ng , quyidagi qatorda setHours ommaviy to'siq usulidan qanday foydalanish ko'rsatilgan Ishlagan soatlar maydoniga qiymat belgilash uchun Worked() :
staff1.setHoursWorked(160);

Bu yerda ishlagan soatlar maydoni 160 ga o'rnatiladi. Ishlagan soatlar maydoniga kirishga harakat qilsangiz bevosita:


personal1.hoursWorked = 160;

siz xatoga duch kelasiz, chunki hoursWorked shaxsiy maydon bo'lib, u faqat Staff sinfida mavjud.


Keyin accountPay() usuli chaqiriladi:


xodimlar1.hisoblashPay(1000, 400);

Bu misolda 1000 va 400 raqamlari qavs ichida berilgan ; bu ikkinchi accountPay() usulidan foydalanilganligini bildiradi. O'tkazilgan 1000 va 400 qiymatlari mos ravishda bonus va nafaqa parametrlariga tayinlanadi .


126 7 -bob. Obyektga yo‘naltirilgan dasturlash

O'tkazilgan qiymatlar argumentlar deb ataladi. Keyin
dastur to'lovni hisoblash uchun ushbu usuldan foydalanadi va to'lov o'zgaruvchisiga tayinlangan natijani qaytaradi .

Nihoyat, System.out.println() usuli qiymatni chop etadi


ekranga to'lash .
Yuqoridagi kodni bajarishda natija quyidagicha ko'rinadi:

Piter
Toÿlov hisoblanmoqda...
To'lov = 6200

Sinflar qanday ishlashini yaxshiroq tushunish uchun ushbu kod bilan tajriba o'tkazing . Quyidagi qatorlarni qo'shishga harakat qiling:


Xodim2 = yangi xodimlar("Jeyn", "Li"); staff2.setHoursWorked(160);
to'lash = staff2.calculatePay(); "
System.out.println("To'lov = + to'lash);

Bu erda ikkinchi konstruktor (2 parametr bilan) xodimlarni imo-ishora qilish uchun ishlatiladi2. Ushbu kod bajarilganda quyidagi natija olinadi:





Jeyn Li
Toÿlov hisoblanmoqda...
To'lov = 4800

Belgilangan usullar yordamida ma'lumotlarni tekshirish qanday ishlashini ko'rsatadigan kodni qo'shamiz . main() usuliga quyidagi qatorlarni qo'shing :



    1. 127-sinf Statik komponentlar

System.out.println("\n\nJeynning ishlagan soati -10 ga yangilanmoqda");



staff2.setHoursWorked(-10); System.out.println("\nIshlagan soatlar =
getHoursWorked());
" + xodimlar2.

to'lash = staff2.calculatePay(); "
System.out.println("To'lov = + to'lash);

Bu erda biz ish soatlarini -10 ga o'rnatishga harakat


qilmoqdamiz . Yuqoridagi kodni bajarish natijasi quyidagicha ko'rinadi:
Jeynning ishlagan soatlarini -10 ga yangilash
Xato: Ishlagan soatlar noldan kichik boÿlishi mumkin emas
Xato: HoursWorked yangilanmagan

Ishlagan soat = 160


Toÿlov hisoblanmoqda…
To'lov = 4800

-10 soatIshlagan diapazonda bo'lmaganligi sababli , o'rnatilgan usul Jeyn misoli uchun maydonni yangilamaydi ( staff2 ). hourWorked get usulini o'qiyotganda , maydonda 160 qiymati saqlanganligi ayon bo'ladi .


Yuqoridagi misol bizning maydonlarimiz qiymatlarini boshqarish uchun o'rnatilgan usullardan qanday foydalanishni ko'rsatadi.
Har doim shaxsiy maydonni o'z ichiga olgan sinfda ma'lumotlarni tekshirishni amalga oshiring . Aks holda, tekshirishni amalga oshirish uchun siz Staff sinfining
foydalanuvchisiga ishonishingiz kerak bo'ladi va bunga ishonish xavfsiz ema

7.4. STATIK SINF KOMPONENTLARI


Ushbu bob juda murakkab tushunchalarni qamrab olgan. Endi siz sinf nima ekanligini va nima ekanligini bilasiz



128 7 -bob. Obyektga yo‘naltirilgan dasturlash

maydonlar, usullar va konstruktorlarni ifodalaydi. Shuningdek, siz darslarni qanday e'lon qilish va ulardan foydalanishni o'rgandingiz. Agar siz ob'ektga yo'naltirilgan dasturlashda yangi bo'lsangiz, men ushbu bobning to'liq kodini quyidagi manzildan
yuklab olishingizni tavsiya qilaman : https://www.learncodingfast.com/java
va u bilan tajriba qiling. Kodni o'rganing va ko'ring davom etishdan oldin ushbu bobda ko'rib chiqilgan barcha mavzularni to'liq tushunib olishingiz kerak.
Ushbu bo'limda ob'ektga yo'naltirilgan dasturlashda qo'llaniladigan boshqa kalit so'z ko'rib chiqiladi , statik.

Avvalroq biz xodimlar1 va xodimlar2 obyektlarini yaratish uchun Staff sinfidan foydalanishni muhokama qildik .


Keyinchalik bu ob'ektlar Staff sinfidagi usullarni chaqirish uchun ishlatiladi
(masalan, personal1.calculatePay(1000, 400)).
Aytaylik, siz ba'zi usullarni chaqirmoqchisiz yoki Staff ob'ektini
yaratmasdan Staff sinfining ba'zi maydonlariga kirmoqchisiz . Buni iloji bormi?
Ha, mumkin. Buning uchun siz static kalit so'zdan foydalanishingiz kerak.
Statik kalit so'zning ma'nosini tushunish uchun quyidagi kodni ko'rib chiqing . NetBeans-ni ishga tushiring va StaticDemo nomli yangi Java ilovasini yarating.
Yaratilgan kodni quyidagi bilan almashtiring :
statik demo paketi;

sinf MyClass


{
// Statik bo'lmagan maydonlar va usullar

    1. 129-sinf Statik komponentlar

public String message = "Salom dunyo"; public void displayMessage()

{
System.out.println("Xabar =
}
"
+xabar);

// Statik maydonlar va usullar


public static String greetings = "Xayrli tong"; umumiy statik bekor displeyHreetings()

{
System.out.println("Salomlashish =
}
}
"
+salomlar);

umumiy sinf StaticDemo {


umumiy statik void main(String[] args) {

MyClass SD = yangi MyClass();


System.out.println(sd.message); sd.displayMessage();


System.out.println(MyClass.greetings); MyClass.displayGreetings();


}
}

Ushbu misol MyClass nomli ikkita sinfni yaratadi va statik demo.


Ushbu misolda ular bir xil faylda aniqlangan. Da


Agar xohlasangiz, bu ikki sinfni har xil sinflarga ajratishingiz mumkin
fayllar. Umuman olganda, iloji bo'lsa, turli sinflarni turli fayllarga joylashtirish kerak deb hisoblanadi. Tem
Biroq, bu misolda, soddalik uchun biz cheklaymiz
lis bitta fayl. Bundan tashqari, kod uzunligini qisqartirish uchun maydonlar ochiq deb e'lon qilindi . Haqiqatda

130 7 -bob. Obyektga yo‘naltirilgan dasturlash

Ilovalarda men maydonlarni shaxsiy deb e'lon qilishni va ular bilan ishlash uchun get va set usullaridan foydalanishni qat'iy tavsiya qilaman .

Bizning misolimizda MyClass bitta statik bo'lmagan xabar maydonini va bitta statik bo'lmagan displayMessage() usulini o'z ichiga oladi. Sinfda bitta statik salomlashish maydoni va bitta statik displayGreetings() usuli mavjud.


MyClass ning statik bo'lmagan komponentlariga murojaat qilish uchun boshqa sinfdan, avval qilinganidek, ob'ektning namunasini yaratishingiz kerak . Bu main() usulida sodir bo'ladi StaticDemo sinfi :
MyClass SD = yangi MyClass();

System.out.println(sd.message); sd.displayMessage();


Biroq, statik maydonlar va usullarga kirish uchun hech qanday ob'ekt yaratilishi shart emas. Ularga murojaat
qilish uchun quyida ko'rsatilganidek, sinf nomidan foydalaning:
System.out.println(MyClass.greetings); MyClass.displayGreetings();

Ushbu kodni ishga tushirganingizda, siz quyidagi natijani olasiz:


Salom Dunyo
Xabar = Salom dunyo xayrli tong
Salom = Xayrli tong

Bu statik maydon/usul va statik bo'lmagan maydon/ usul o'rtasidagi asosiy farq . Birinchisiga murojaat qilish uchun ob'ekt yaratishingiz shart emas; yetarli



    1. Murakkab usullar 131


sinfning o'zi nomini belgilang. Ikkinchisiga kirish uchun ob'ekt kerak.

Java tilidagi ba'zi oldindan yozilgan usullar statik deb e'lon qilinadi. Masalan, Arrays sinfining usullari. Sinf nomi sinfdagi metodga murojaat qilish uchun ishlatiladi. Masalan, sort() usulini chaqirish uchun


Arrays.sort() yozuvidan foydalanish kerak .





    1. ILG'IY USULLAR




      1. METODLARDA MASÿVLARDAN FOYDALANISH

Ushbu bobni yakunlashdan oldin, men usullar bilan bog'liq yana ikkita tushunchani muhokama qilmoqchiman. Birinchisi
usullarda massivlardan foydalanish.

Ilgari siz metod parametrlarida ibtidoiy ma'lumotlar turlaridan (masalan, int) qanday foydalanishni o'rgandingiz . Usullardagi


ibtidoiy ma'lumotlar turlaridan tashqari siz ham foydalanishingiz mumkin
massivlardan foydalaning.
Massivni usul parametriga aylantirish uchun metod deklaratsiyasida parametrning maÿlumotlar turidan keyin kvadrat qavslar [] qoÿshing. Misol:

public void printFirstElement(int[] a)


{

}


Ushbu usulni chaqirganda, siz massivni e'lon qilishingiz va uni
usul argumenti sifatida topshirishingiz kerak. Quyida misol keltiriladi.
132 7 -bob. Obyektga yo‘naltirilgan dasturlash

Massivlarni parametr sifatida uzatishdan tashqari, metoddan massivni qaytarish ham mumkin. Buning uchun usul deklaratsiyasida qaytarish turidan keyin kvadrat qavslar [] qo'yiladi. Misol:

public int[] returnArray()


{
int[] a = new int[3];

// Massivdagi qiymatlarni yangilash uchun kod


a qaytarish;


}

Ushbu usuldan foydalanish uchun siz e'lon qilishingiz kerak


massivni yarating va unga usulning bajarilishi natijasini belgilang.
Massivlarni usullarda qanday ishlatishni yaxshiroq tushunish uchun Array nomli yangi Java ilovasini yarating MethodDemo va yaratilgan kodni quyidagi bilan almashtiring:
1 paketli massiv usuli namunasi; 2
3 import java.util.Arrays;
to'rtta
5-sinf MyClass{ 6

7
sakkiz

9
public void printFirstElement(int[] a)


{
System.out.println("Birinchi element " a[0]); +

o'n }





o'n bir

12
13


o'n to'rt
o'n besh

16
17


public int[] returnArray()


{
int[] a = new int[3];
uchun (int i = 0; i < a.uzunlik; i++)
{
a[i] = i*2;

7.5. Murakkab usullar 133




o'n sakkiz


19
yigirma


21
22}


23

}
a qaytarish;


}

  1. ommaviy sinf ArrayMethodDemo {

  2. umumiy statik bekor asosiy(String[] args) { 26

27




MyClass amd = new MyClass();

28







29




int[] myArray = {1, 2, 3, 4, 5};

o'ttiz
31




amd.printFirstElement(myArray);

32




int[] myArray2 = amd.returnArray();

33




System.out.println(Arrays.toString(myArray2));

34







35

}




36}







Ushbu misolda MyClass va ArrayMethodDemo kabi ikkita sinf soddalik uchun yana bitta faylga kiritilgan.


MyClass sinfi (5-22-qatorlar) ikkita usulni o'z ichiga oladi.
Birinchi usul, printFirstElement() parametrlarda massivdan foydalanish imkoniyatini ko'rsatadi .
Ikkinchi usul - returnArray() qanday qaytishni ko'rsatadi usuldan massiv.
Ushbu ikki usuldan foydalanish uchun biz main() usulida amd nomli MyClass obyektini ishga tushiramiz (27-qator).
Keyinchalik, massiv e'lon qilinadi va 29 va 30-qatorlarda printFirstElement() usuliga argument sifatida uzatiladi:
int[] myArray = {1, 2, 3, 4, 5}; amd.printFirstElement(myArray);

134 7 -bob. Obyektga yo‘naltirilgan dasturlash

Bundan tashqari, ikkinchi massiv ham main() usulida e'lon qilinadi, unga qaytarish usulining natijasi tayinlanadi. Array() (32-qator):
int[] myArray2 = amd.returnArray();

Nihoyat, 33-qator massiv tarkibini chop etadi.


Ushbu dasturni ishga tushirish quyidagi natijani beradi:

Birinchi element 1


[0, 2, 4]



      1. PARAMETRLARDA PRIMITIV VA REFERANS TURLARDAN O'TISH

Endi siz massivni metodga qanday o'tkazishni bilasiz. Ras


ibtidoiy parametrlar orasidagi farqlarga qarang
va mos yozuvlar turlari (massivlar kabi). Bu turlar orasida bitta muhim farq bor.
Primitiv turdagi o'zgaruvchini o'tkazishda ushbu o'zgaruvchining qiymatiga har qanday o'zgartirish faqat usulning o'ziga ta'sir qiladi. Dastur usuldan chiqqandan so'ng, o'zgarishlar yo'qoladi.
Boshqa tomondan, mos yozuvlar turidagi o'zgaruvchini o'tkazishda, o'zgaruvchining qiymatiga kiritilgan har qanday o'zgarishlar usul tugagandan keyin ham qoladi.
Ushbu mexanizm qanday ishlashini tushunish uchun ArrayMethod Demo.java faylidan MyClass sinfiga quyidagi ikkita usulni kiriting:


7.5. Murakkab usullar 135
public void passPrimitive(int primitivePara)
{
primitivePara = 10; "
System.out.println("Usul ichidagi qiymat = primitivePara); +

}


public void passReference(int[] refPara)
{
refPara[1] = 5; "
System.out.println("Usul ichidagi qiymat = refPara[1]); +

}
Birinchi usul ibtidoiy turdagi parametrni (int primitivePara) oladi va uning qiymatini o'zgartirishga harakat qiladi. Keyin parametr qiymatini chiqaradi.


Ikkinchi usul mos yozuvlar turi parametrini ( massiv) oladi va massivdagi ikkinchi elementning qiymatini o'zgartirishga
harakat qiladi . Keyin ushbu elementning qiymatini chiqaradi.
main() dasturiga quyidagi kod qatorlarini qo'shing :



int raqami = 2; System.out.println("oldingi raqam = amd.passPrimitive(raqam);
System.out.println("sondan keyingi raqam = System.out.print("\n");
" +raqam);
" +raqam);

System.out.println("myArray[1] oldin = amd.passReference(myArray); System.out.println("myArray[1] = dan keyin


" + myArray[1]);
" + myArray[1]);

Dasturni ishga tushirganingizda, siz quyidagi qo'shimcha natijalarni olasiz:

136 7 -bob. Obyektga yo‘naltirilgan dasturlash



oldingi raqam = 2


Usul ichidagi qiymat = 10
= 2 dan keyingi raqam

myArray[1] dan oldin = 2 Usul ichidagi qiymat = 5


myArray[1] dan keyin = 5

Ko'rib turganingizdek, raqamning qiymati usul chaqirilgunga qadar o'zgarishsiz qoladi . Boshqa tomondan, myArray [1] qiymati


usul chaqirilgandan keyin o'zgaradi.

Gap shundaki, siz mos yozuvlar turidagi o'zgaruvchini


o'tkazganingizda, siz o'zgaruvchining manzilini o'tkazasiz. Rasm kompilyatori
berilgan manzilda schatsya va tegishli qiladi xotirada saqlangan o'zgaruvchiga o'zgarishlar.
Boshqa tomondan, ibtidoiy turdagi o'zgaruvchini
o'tkazishda uning manzili emas, balki uning qiymati o'tkaziladi.

Misol uchun, agar o'zgaruvchan raqam 2 bo'lsa, qo'ng'iroq


amd.passPrimitive(raqam);


quyidagilarga teng:


amd.passPrimitive(2);


2 qiymati primitivePara parametriga beriladi. Raqam manzilini kiritmayotganimiz sababli , usul ichida qilgan har qanday o'zgarishlar raqamga ta'sir qilmaydi.


Bu metodga ibtidoiy tipdagi (masalan, int, float va boshqalar) mos yozuvlar turidagi (massiv kabi) o‘zgaruvchini o‘tkazishda doimo yodda tutish kerak bo‘lgan juda muhim farqdir .
Machine Translated by Google
sakkiz

Download 1,09 Mb.

Do'stlaringiz bilan baham:
1   ...   12   13   14   15   16   17   18   19   ...   24




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish