Sobes.tech
Junior

Javaда кайсыл учурларда final модификатору колдонулушу мүмкүн?

sobes.tech AI

AIден жооп

Java-да final модификатору колдонуу мүмкүн:

  1. Өзгөрүлбөс өзгөрмөлөр:
    • Жергиликтүү өзгөрмөлөр: Алардын мааниси бир жолу берилет жана инициализациядан кийин өзгөртүлбөйт.
    • Класс талаалары: Талаанын мааниси же жарыялоо учурунда, же конструктордо берилет жана андан ары өзгөртүлбөйт.
    • Метимдин параметрлери: Методуң ичинде параметр константага айланат; аны методтун ичинде кайра белгилөөгө болбойт.

final колдонуу өзгөрмөлөргө:

  • Туруктуулук: Мән өзгөрбөй турганына кепилдик берет.
  • Жиптердин коопсуздугу: final класс талаасы автоматтык түрдө бардык агымдарга көрүнөт, конструктор аяктагандан кийин кошумча синхрондоштуусуз.
  • Компилятордун оптималдаштыруулары: Компилятор мааниси өзгөрбөй турганын билсе, кээ бир оптималдаштырууларды жасай алат.
  1. Метимдер:

    • final деп белгиленген метим кайра аныкталбайт:
    • Бул:
      • Көрсөтүлгөн өзгөрүүлөрдү алдын алуу: Метимдин логикасы өзгөрбөйт деп кепилдик берет.
      • Композицияны колдоо: Мурас алуу ордуна композицияны колдонууга түртөт.
      • Компилятордун оптималдаштыруулары: final метимдерди инлайн кылуу мүмкүн.
  2. Класстар:

    • 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
// }