Sobes.tech
Junior

Java-da hansı hallarda final modifikatoru istifadə oluna bilər?

sobes.tech Süni İntellekt

AI-dan cavab

Java-da final modifieri aşağıdakı yerlərə tətbiq oluna bilər:

  1. Dəyişənlər:

    • Yerli dəyişənlər: Onların dəyəri bir dəfə təyin edilir və təyin olunduqdan sonra dəyişdirilə bilməz.
    • Sinif sahələri: Sahənin dəyəri ya elan zamanı, ya da konstruktor daxilində təyin edilir və sonra dəyişdirilə bilməz.
    • Metod parametrləri: Metod daxilində parametr sabit olur; onun yenidən təyin edilməsi mümkün deyil.

    final dəyişənlərə tətbiqi aşağıdakıları təmin edir:

    • Dəyişməzlik: Dəyərin dəyişməyəcəyinə zəmanət verir.
    • İpləklilik təhlükəsizliyi: final sinif sahələri avtomatik olaraq bütün ipliklər üçün görünəndir və konstruktor tamamlandıqdan sonra əlavə sinxronizasiya olmadan istifadə edilə bilər.
    • Kompilyator optimizasiyaları: Dəyər dəyişməyəcəyini bildiyi üçün bəzi optimizasiyalar edə bilər.
  2. Metodlar:

    • final kimi elan edilmiş metodlar alt siniflərdə yenidən təyin edilə bilməz.
    • Bu aşağıdakı məqsədlər üçün faydalıdır:
      • İstənməyən davranış dəyişikliklərinin qarşısını almaq: Metodun məntiqi dəyişməz qalır.
      • Kompozisiyanı təşviq etmək: İrsiyyət yerinə kompozisiyadan istifadə etməyə təşviq edir.
      • Kompilyator optimizasiyaları: final metodların inline edilə bilməsini təmin edir.
  3. Siniflər:

    • final kimi elan edilmiş siniflər alt siniflərə malik ola bilməz.
    • final sinifin tətbiqi aşağıdakı məqsədlər üçün istifadə olunur:
      • Dəyişməz (immutable) siniflərin yaradılması: Məsələn, primitiv tiplər üçün wrapper siniflər (Integer, String).
      • Dizaynın qorunması: Sinifin genişləndirilməsinin qarşısını alır və invariantləri pozma riskini azaldır.
      • Təhlükəsizliyin artırılması: Sinifin davranışının dəyişdirilməsinin qarşısını alır.
Tətbiq Təsviri Üstünlüklər
final sahə Dəyər bir dəfə təyin edilir (elan və ya konstruktor daxilində). Dəyişməzlik, iplik təhlükəsizliyi, optimizasiyalar.
final parametr Dəyər metod daxilində dəyişdirilə bilməz. Aydın imza, dəyişməzlik zəmanəti.
final metod Alt siniflərdə yenidən təyin edilə bilməz. Davranışın dəyişməsinin qarşısını almaq, kompozisiyanı təşviq etmək, optimizasiyalar.
final sinif Alt siniflərə malik ola bilməz (irəliyə doğru irsiyyət mümkün deyil). Dəyişməz sinif, dizaynın qorunması, təhlükəsizliyin artırılması.

Misallar:

public class Example {
    // final sahə
    private final String name;

    // final primitiv sahə
    private final int id;

    // final, lakin müxtəlif obyektlərə istinad edə bilər List
    private final List<String> items;

    // Kompilyasiya vaxtı sabit
    public static final double PI = 3.14159;

    public Example(String name, int id) {
        this.name = name; // final sahəyə təyin
        this.id = id; // final sahəyə təyin
        this.items = new ArrayList<>(); // final list sahəsinin ilkinləşdirilməsi
    }

    // final metod
    public final void printDetails() {
        System.out.println("Name: " + name + ", ID: " + id);
    }

    // final parametrli metod
    public void addItem(final String item) {
        // item = "yeni element"; // kompilyasiya xətası: Cannot assign a value to final variable 'item'
        items.add(item);
    }
}

// final sinif
// 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 { // Kompilyasiya xətası: Cannot inherit from final class
// }