JavaRush /Kurslar /All lectures for UZ purposes /O'zgaruvchilar bilan ishlashda nozik jihatlar

O'zgaruvchilar bilan ishlashda nozik jihatlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Konstantalar

Ko'pgina dasturlash tillarida konstantalar mavjud — qiymati o'zgartirilmaydigan o'zgaruvchilar. Odatda bu Pi soni yoki oyning kunlari kabi asosiy narsalardir. Dasturchilar istasa har qanday o'zgaruvchini konstantaga aylantirishi mumkin.

Xo'sh, Java'da o'zgarmas o'zgaruvchini (konstantani) qanday e'lon qilish mumkin? Buning uchun maxsus kalit so'z mavjud — final. O'zgarmas o'zgaruvchi yaratish oddiy o'zgaruvchi yaratishga o'xshaydi, faqat o'zgaruvchi turidan oldin final so'zi qo'shiladi:

final тип имя = значение;

Agar siz final o'zgaruvchiga boshqa qiymat berishga harakat qilsangiz, dasturingiz shunchaki kompilyatsiya qilinmaydi.

final o'zgaruvchini e'lon qilish paytidan boshlab boshlang'ich qiymat berish shart. Bu qoida uchun bitta istisno mavjud: sinf o'zgaruvchisining boshlang'ich qiymatini konstruktor ichiga ko'chirish mumkin. Ammo bu haqida 10-darajada bilib olasiz.

Java'dagi kalit so'zlarni kamaytirish uchun, dasturchilar final so'zini faqat konstantalarni e'lon qilish uchun emas, balki metodlar va hatto sinflar uchun ham qo'llaydilar. final deb e'lon qilingan metodlarni qayta aniqlash (override) mumkin emas va final deb e'lon qilingan sinfdan meros olish (inherit) mumkin emas.

final modifikatori har qanday o'zgaruvchilar oldida qo'shilishi mumkin: mahalliy, parametrlar, sinf maydonlari va statik o'zgaruvchilar.

E'tibor bering, final — bu shunchaki o'zgaruvchini o'zgartirishdan himoya. Agar o'zgaruvchi ob'ektga havola saqlasa, ob'ektni o'zgartirish mumkin.

Misol:

final int[] data = {1, 2, 3, 4, 5, 6};

data = new int[]{6, 7, 8, 9};

data[0] = 0;
data[1] = 0;
data[2] = 0;
Massiv yaratamiz.

Bunaqa bo'lmaydi: data o'zgaruvchisi final deb e'lon qilingan.

Bunaqa bo'ladi.
Va bunaqa ham bo'ladi.

Global konstantalar

Agar siz dasturingizda global konstantalar e'lon qilishga qaror qilsangiz, buning uchun statik sinf o'zgaruvchilarini yaratishingiz, shuningdek ularni public va final qilishingiz kerak. Bunday o'zgaruvchilar nomlari uchun maxsus yozuv uslubi mavjud: ular katta harflar bilan yoziladi va so'zlar orasidagi ajratkvchi sifatida pastki chiziq ishlatiladi.

Misollar:

class Solution
{
   public static final String SOURCE_ROOT = "c:\\projects\\my\\";
   public static final int DISPLAY_WIDTH = 1024;
   public static final int DISPLAY_HEIGHT = 768;
}


2. O'zgaruvchilarni soya qilish

Avval aytganimizdek, bitta metodda bir nechta mahalliy o'zgaruvchilarni bir xil nom bilan yaratish mumkin emas. Ammo turli metodlarda — mumkin.

Lekin siz bilmagan bo'lishingiz mumkin: klass o'zgaruvchilari va metodning mahalliy o'zgaruvchilari bir xil nomga ega bo'lishi mumkin.

Misol:

Kod O'zgaruvchilarning ko'rinishi
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     int sum = data * 2;
     count++;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum, data
count, sum

add metodida mahalliy sum o'zgaruvchisini e'lon qildik va u metod davomida klass o'zgaruvchisini (sum) soya qiladi (bu holatni soya qilish deb ham atashadi).

Yaxshi, deysiz, bu kutilgan xatti-harakatdir. Lekin bu hammasi emas. Agar klass o'zgaruvchisini mahalliy o'zgaruvchi soya qilsa, metodda klass o'zgaruvchisiga murojaat qilishning yana bir usuli mavjud. Uning nomidan oldin this kalit so'zini yozishingiz kerak:

this.имя

Mana, ismlar konfliktsi muvaffaqiyatli hal qilinadigan misol:

Kod O'zgaruvchilarning ko'rinishi
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     this.sum = this.sum + data;
     count++;
   }
}


this.count
this.count, this.sum
this.count, this.sum
this.count, this.sum
this.count, this.sum, data
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum, data, sum
this.count, this.sum

Har joyda count va sum o'zgaruvchilari kalit so'z this bilan ham, uningsiz ham mavjud. O'sha satrlarda, mahalliy sum o'zgaruvchisi klass o'zgaruvchisini (sum) soya qilganda, klass o'zgaruvchisi (sum) ga faqat this kalit so'zi orqali kirish mumkin.

Agar soya qilinsa klassning statik o'zgaruvchisi bo'lsa, unga this orqali emas, balki klass nomi orqali murojaat qilish kerak:

ClassName.имя

Misol:

Kod O'zgaruvchilarning ko'rinishi
public class Solution
{
   public static int count = 0;
   public static int sum = 0;

   public void add(int data)
   {
     int sum = data * 2;
     Solution.sum = Solution.sum + data;
     count++;
   }
}

Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum
Solution.count, Solution.sum, data
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum, data, sum
Solution.count, Solution.sum

Har joyda statik count va sum o'zgaruvchilari Solution klass nomini prefiks qilib ishlatish yoki uni ishlatmaslik bilan mavjud. O'sha satrlarda, mahalliy sum o'zgaruvchisi klass o'zgaruvchisini (sum) soya qilganda, klass o'zgaruvchisi (sum) ga faqat Solution prefiksi orqali kirish mumkin.



3. for ichidagi o'zgaruvchilar

Yana bitta kichik lekin qiziqarli fakt.

Yana bir joy bor, bu for siklida o'zgaruvchi maxsus tarzda e'lon qilinadi.

Agar eslasangiz, odatda for siklida dumaloq qavs ichida hisoblagich o'zgaruvchisi e'lon qilinadi. Ushbu o'zgaruvchining ko'rinish darajasi qanday bo'ladi? U sikl tanasida joylashmagan — demak butun metodda ko'rinadimi? Yoki yo'qmi?

To'g'ri javob shu: for sikli sarlavhasida e'lon qilingan o'zgaruvchi faqat sikl tanasida va for sikli sarlavhasida ko'rinadi.

Misol:

Kod O'zgaruvchilarning ko'rinishi
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a

Shuning uchun siz har doim dasturingizda ketma-ket bir nechta sikllar yozishingiz mumkin, bir xil nom bilan hisoblagich o'zgaruvchisini ishlatib — hech qanday muammo bo'lmaydi.

Misol:

Kod O'zgaruvchilarning ko'rinishi
public static void main(String[] args)
{
   int a = 0;

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   for (int i = 0; i < 10; i++)
   {
     System.out.println(i);
   }

   System.out.println("end");
}


a
a
a, i
a, i
a, i
a
a
a, i
a, i
a, i
a
a
a


Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION