Junior
Javaда кайсыл учурларда final модификатору колдонулушу мүмкүн?
sobes.tech AI
AIден жооп
Java-да final модификатору колдонуу мүмкүн:
- Өзгөрүлбөс өзгөрмөлөр:
- Жергиликтүү өзгөрмөлөр: Алардын мааниси бир жолу берилет жана инициализациядан кийин өзгөртүлбөйт.
- Класс талаалары: Талаанын мааниси же жарыялоо учурунда, же конструктордо берилет жана андан ары өзгөртүлбөйт.
- Метимдин параметрлери: Методуң ичинде параметр константага айланат; аны методтун ичинде кайра белгилөөгө болбойт.
final колдонуу өзгөрмөлөргө:
- Туруктуулук: Мән өзгөрбөй турганына кепилдик берет.
- Жиптердин коопсуздугу:
finalкласс талаасы автоматтык түрдө бардык агымдарга көрүнөт, конструктор аяктагандан кийин кошумча синхрондоштуусуз. - Компилятордун оптималдаштыруулары: Компилятор мааниси өзгөрбөй турганын билсе, кээ бир оптималдаштырууларды жасай алат.
-
Метимдер:
finalдеп белгиленген метим кайра аныкталбайт:- Бул:
- Көрсөтүлгөн өзгөрүүлөрдү алдын алуу: Метимдин логикасы өзгөрбөйт деп кепилдик берет.
- Композицияны колдоо: Мурас алуу ордуна композицияны колдонууга түртөт.
- Компилятордун оптималдаштыруулары:
finalметимдерди инлайн кылуу мүмкүн.
-
Класстар:
finalдеп белгиленген класс мураска жабык:- Колдонуу:
- Туруктуу (immutable) класстарды түзүү: Мисалы, примитивдердин орау класстары (Integer, String):
- Дизайнды коргоо: Кеңейтүүгө тыюу салат, ал класс инварианттарын бузушу мүмкүн.
- Коопсуздукту жогорулатуу: Классдин жүрүм-туруму өзгөрбөйт деп кепилдик берет.
| Колдонуу | Сипаттама | Артыкчылыктар |
|---|---|---|
final талаа |
Мән бир жолу берилет (жариялоо же конструктордо). | Туруктуулук, жиптердин коопсуздугу, оптималдаштыруулар |
final параметр |
Мән методтун ичинде өзгөртүлбөйт. | Ачык сигнатура, маанинин өзгөрбөө кепилдиги |
final метим |
Мурас класстарында кайра аныкталбайт. | Жүрүмдү өзгөртүүгө жол бербейт, композицияны колдоо, оптималдаштыруулар |
final класс |
Мурас алуу мүмкүн эмес. | Туруктуулук, дизайнды коргоо, коопсуздукту жогорулатуу |
Мисалдар:
public class Example {
// final талаа
private final String name;
// final примитив талаа
private final int id;
// final, бирок башка объекттерге шилтеме болушу мүмкүн Listке, бирок түзүлө элек
// объект түзүлгөндөн кийин, шилтемени өзгөртүү мүмкүн, бирок башка Listке шилтемени кайра белгилөө мүмкүн эмес
private final List<String> items;
// Компиляция убакыттагы туруктуулук
public static final double PI = 3.14159;
public Example(String name, int id) {
this.name = name; // `final` талаага маанини белгилөө
this.id = id; // `final` талаага маанини белгилөө
this.items = new ArrayList<>(); // `final` талааны инициализациялоо
}
// `final` метим
public final void printDetails() {
System.out.println("Name: " + name + ", ID: " + id);
}
// `final` параметри бар метим
public void addItem(final String item) {
// item = "жаңы элемент"; // компиляция катасы: Cannot assign a value to final variable 'item'
items.add(item);
}
}
// final класс
// 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 { // компиляция катасы: Cannot inherit from final class
// }