Junior
Java'da qaysi hollarda final modifikatori qo'llanilishi mumkin?
sobes.tech AI
AIdan javob
Java'da final modifikatori quyidagi holatlarda qo'llaniladi:
-
O'zgaruvchilar:
- Mahalliy o'zgaruvchilar: Ularning qiymati bir marta tayinlanadi va tayinlanganidan keyin o'zgartirilmaydi.
- Sinf maydonlari: Maydonning qiymati e'lon qilish yoki konstruktor davomida tayinlanadi va keyin o'zgartirilmaydi.
- Metod parametrlari: Metod ichidagi parametr konstantaga aylanadi; metod tanasida uni qayta tayinlash mumkin emas.
finalni o'zgaruvchilarga qo'llash quyidagi afzalliklarni ta'minlaydi:- O'zgarmaslik: Qiymat o'zgarmasligini kafolatlaydi.
- Ipga xavfsizlik:
finalsinf maydonlari konstruktor tugagandan so'ng barcha iplar uchun ko'rinadigan bo'ladi, qo'shimcha sinxronizatsiz. - Kompilyator optimallashtirishlari: Qiymat o'zgarmasligini bilgan holda, kompilator ba'zi optimallashtirishlarni amalga oshirishi mumkin.
-
Metodlar:
finaldeb e'lon qilingan metodlar voris sinflarda qayta yozib bo'lmaydi.- Bu quyidagilar uchun foydalidir:
- Nomaqbul xatti-harakatlarni oldini olish: Metod mantiqasi o'zgarmasligini ta'minlaydi.
- Kompazitsiyani rag'batlantirish: Meros o'rniga kompozitsiyadan foydalanishni qo'llab-quvvatlaydi.
- Kompilyator optimallashtirishlari: Kompilator
finalmetod chaqiruvlarini inline qilishi mumkin.
-
Klasslar:
finaldeb e'lon qilingan klass voris ololmaydi.finalni klasslarda qo'llash quyidagilar uchun:- O'zgarmas (immutable) klasslar yaratish: Masalan, primitiv turlarining o'ram klasslari (Integer, String).
- Dizaynni himoyalash: Kengaytirishni oldini oladi, bu klassning invariantsini buzishi mumkin.
- Xavfsizlikni oshirish: Klassning xatti-harakatlarini vorislar orqali o'zgartirish mumkin emasligini kafolatlaydi.
| Qo'llash | Tavsifi | Afzalliklar |
|---|---|---|
final maydon |
Qiymat bir marta tayinlanadi (e'lon qilish yoki konstruktor). | O'zgarmaslik, ipga xavfsizlik, optimallashtirishlar. |
final parametr |
Qiymat metod ichida o'zgartirilmaydi. | Aniq imzo, parametrning o'zgarmasligini kafolatlash. |
final metod |
Voris sinflarda qayta yozib bo'lmaydi. | Xatti-harakat o'zgarishini oldini olish, kompozitsiyani rag'batlantirish, optimallashtirishlar. |
final klass |
Voris ololmaydi (meros olish mumkin emas). | O'zgarmas klass, dizaynni himoyalash, xavfsizlikni oshirish. |
Misollar:
public class Example {
// final klass maydoni
private final String name;
// final primitiv maydon
private final int id;
// final, lekin hali yaratilmagan List ob'ektiga referensga ega bo'lishi mumkin
// ob'ekt yaratilgandan so'ng, referensni o'zgartirish mumkin, lekin referens o'zi emas
private final List<String> items;
// Kompilatsiya vaqtidagi konstant
public static final double PI = 3.14159;
public Example(String name, int id) {
this.name = name; // final maydoniga tayinlash
this.id = id; // final maydoniga tayinlash
this.items = new ArrayList<>(); // final maydonini boshlash
}
// final metod
public final void printDetails() {
System.out.println("Name: " + name + ", ID: " + id);
}
// final parametrli metod
public void addItem(final String item) {
// item = "yangi element"; // kompilatsiya xatosi: final o'zgaruvchiga tayinlash mumkin emas
items.add(item);
}
}
// final klass
// public final class ImmutableClass {
// private final int value;
//
// public ImmutableClass(int value) {
// this.value = value;
// }
//
// public int getValue() {
// return value;
// }
// }
// public class SubclassOfImmutable extends ImmutableClass { // kompilatsiya xatosi: final klassdan meros olish mumkin emas
// }
```}}}}}