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:
-
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.
finaldə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:
finalsinif 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.
-
Metodlar:
finalkimi 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ı:
finalmetodların inline edilə bilməsini təmin edir.
-
Siniflər:
finalkimi elan edilmiş siniflər alt siniflərə malik ola bilməz.finalsinifin 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
// }