Statik o'zgaruvchilar

All lectures for UZ purposes
Daraja, Dars
Mavjud

1. Statik o'zgaruvchilar

Sinf xotiraga yuklanganida, darhol statik sinf obyekti yaratiladi. Ushbu obyekt sinfning statik o'zgaruvchilarini (sinfning statik maydonlarini) saqlaydi. Statik sinf obyekti mavjud, hatto sinfning hech qanday oddiy obyekti yaratilmagan bo'lsa ham.

Sinfda o'zgaruvchilarni tavsiflaganimizda, biz ushbu o'zgaruvchilar faqat bir marta yaratiladimi yoki har bir obyekti uchun ularning nusxalarini yaratish kerakmi, bu haqida ko'rsatamiz. Odatda har bir obyekti uchun o'zgaruvchining yangi nusxasi yaratiladi.

Statik (static) o'zgaruvchi esa statik sinf obyektiga bog'langan va har doim yagona nusxada mavjud.

Sinfning statik o'zgaruvchisini yaratish uchun uning nomi oldida static kalit so'zini yozish kerak. Statik o'zgaruvchini e'lon qilish umumiy ko'rinishi:

static Tur nomi = qiymat;

Agar statik o'zgaruvchiga boshlang'ich qiymat berilmasa, u default qiymat bilan initsializatsiya qilinadi:

Tur Default qiymat
byte
0
short
0
int
0
long
0
float
0.0
double
0.0
char
'\u0000'
(xuddi
0
kabi)
boolean
false
Object
va har qanday sinflar
null

Misollar:

Kod
public static int WIDTH = 100;
public static String message = "Hello";
private static Scanner console;
private static int count = 0;
private static boolean flag;

Statik o'zgaruvchiga uning sinfida ism orqali murojaat qilsa bo'ladi. Agar murojaat boshqa sinfdan bo'lsa, statik o'zgaruvchining nomi oldida sinf nomini yozish kerak.

SinfNomi.o'zgaruvchi

Misol:

O'zgaruvchi Sinf Sinfdan tashqarida o'zgaruvchiga murojaat
public static int WIDTH = 100;
Solution
Solution.WIDTH
public static String message = "Hello";
Main
Main.message
private static Scanner console;
JavaGame
O'zgaruvchi private, sinfdan tashqarida ko'rinmaydi
private static int count = 0;
Counter
O'zgaruvchi private, sinfdan tashqarida ko'rinmaydi
private static boolean flag;
Arithmetic
O'zgaruvchi private, sinfdan tashqarida ko'rinmaydi


2. Statik va oddiy o'zgaruvchilar o'rtasidagi farq

Oddiy (oddiy) sinfning o'zgaruvchilari xuddi statiklar kabi e'lon qilinadi, faqat static kalit so'zisiz.

Oddiy va statik o'zgaruvchilar o'rtasida qanday farqlar bor?

Oddiy sinfning o'zgaruvchilari sinf obyektlariga bog'langan (sinfning nusxalari), statik o'zgaruvchilar esa sinfning statik obyektiga.

Agar sinfning bir nechta nusxasi bo'lsa, har birida sinfning oddiy (oddiy) o'zgaruvchilarining o'z nusxasi mavjud. Sinfning statik o'zgaruvchilari har doim sinfning statik obyektida bo'ladi va faqat bitta nusxada mavjud.

Sinfning oddiy o'zgaruvchilariga (sinfning maydonlari) faqat sinf obyekti uchun havolaga ega bo'lgan holda murojaat qilish mumkin. Yoki ushbu sinf ichidagi metodlarda.

Misol:

Sinfning maydoniga havola orqali murojaat qilish
public class DataInfo
{
   public int value = 100;
}

public class Solution
{
   public static void main(String[] args)
   {
      DataInfo info = new DataInfo();
      System.out.println(info.value);
   }
}

Statik o'zgaruvchilarga har qanday joydan murojaat qilish mumkin (vidimlik modifikatorlarini hisobga olgan holda): oddiy metodlardan, o'sha sinfning statik metodlaridan, boshqa sinflarning metodlaridan va hokazo.

Misol:

Sinfning statik maydoniga havolani foydalanmasdan murojaat qilish
public class DataInfo
{
   public static int value = 100;
}

public class Solution
{
   public static void main(String[] args)
   {
      System.out.println(DataInfo.value);
   }
}

Xotirada tuzilishi:

Faraz qilaylik, bizda Person sinfi mavjud bo'lib, unda 4 maydon bor: ikkita statik va ikkita oddiy.

public class Person
{
   public static int count = 0;
   public static int sum = 0;
   public int age = 0;
   public String name;
}

Sinf yuklangandan so'ng darhol

Java-mashina Person sinfini yuklashni tugatgandan so'ng, xotirada bizda quyidagi manzara kuzatiladi:

Statik va oddiy o'zgaruvchilar o'rtasidagi farq

Birinchi obyektni yaratgandan so'ng

Agar biz Person sinfining obyekti yaratsak, manzara quyidagi dasturga aylanadi

Statik va oddiy o'zgaruvchilar o'rtasidagi farq 1

E'tibor bering, obyektlarda ikkita o'zgaruvchi bor, lekin bu turli o'zgaruvchilar: oddiy obyektda - oddiy, statik obyektda esa - statik.

Ko'proq obyektlar kerak

Keling, yana ikkita obyekt yaratamiz, ular Person turiga kiradi. Yangi manzara quyidagi ko'rinishga ega bo'ladi:

Statik va oddiy o'zgaruvchilar o'rtasidagi farq 2

E'tibor bering: har bir obyektning o'ziga xos age va name o'zgaruvchisi mavjud.



3 Static modifikatorni o'chirish va qo'shish

Statikdan oddiysiga

Statik o'zgaruvchini olib, uni oddiyga aylantirsak nima bo'ladi: biz static modifikatorini olib tashlaymizmi? Masalan, static int sum o'zgaruvchisiga.

O'zgartirilgan kod quyidagi ko'rinishga ega bo'ladi:

public class Person
{
   public static int count = 0;
   public int sum = 0;
   public int age = 0;
   public String name;
}

Xotirada biz quyidagi manzarani olamiz:

Static modifikatorni o'chirish va qo'shish

Statik o'zgaruvchi statik obyektda yo'qoladi, lekin har bir obyektning o'z sum o'zgaruvchisi mavjud bo'ladi.

Oddiydan statik

Aksincha qilish mumkin: sinfning oddiy o'zgaruvchilari oldiga static modifikatorini qo'shib qo'yish mumkin, va keyin ular barcha obyektdan g'oyib bo'lib, statik obyektga beriladi. Misol uchun, biz age va name o'zgaruvchilarini statik qilishga qaror qildik. Keyin kod quyidagi ko'rinishga ega bo'ladi:

public class Person
{
   public static int count = 0;
   public int sum = 0;
   public static int age = 0;
   public static String name;
}

Xotirada biz quyidagi manzarani olamiz:

Static modifikatorni o'chirish va qo'shish
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION