Junior
Дар кадом ҳолатҳо модификатори final дар Java истифода мешавад?
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-ке сілтемені өзгертуге болады, бірақ басқа 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
// }