1. Константи
У багатьох мовах програмування є константи — змінні, значення яких не можна змінювати. Зазвичай це якісь фундаментальні речі типу числа Pi або кількості днів у місяцях. Хоча, в принципі, програміст може зробити будь-яку змінну константою, якщо вирішить, що це необхідно.
Отже, як же оголосити незмінну змінну (константу) в Java? Для цього є спеціальне ключове слово — final. Виглядає створення незмінної змінної так само, як і створення звичайної, тільки перед типом змінної потрібно написати слово final:
final тип ім'я = значення;
Якщо ви спробуєте присвоїти final-змінній інше значення, ваша програма просто не скомпілюється.
final-змінну обов'язково потрібно ініціалізувати при оголошенні (присвоїти їй значення). У цього правила є одне виключення: можна перенести ініціалізацію змінної класу в конструктор. Але про це ви дізнаєтеся на 10-му рівні.
Щоб зменшити кількість ключових слів, розробники Java використовують слово final не тільки для оголошення констант. final також може бути вказано перед методом і навіть класом. Методи, оголошені як final, не можна перевизначати (override), а від класу, оголошеного як final, не можна наслідуватись.
Модифікатор final можна додавати перед будь-якими змінними: локальними, параметрами, полями класу і статичними змінними.
Зверніть увагу, що final — це всього лише захист від зміни змінної. Якщо змінна зберігає посилання на об'єкт, об'єкт все ж таки змінювати можна.
Приклад:
|
Створюємо масив. Так не можна: змінна data оголошена як final.А так можна. І так можна. |
Глобальні константи
Якщо ви вирішите оголосити у своїй програмі глобальні константи, для цього потрібно створити статичні змінні класу, а також зробити їх public і final. Для імен таких змінних існує спеціальний стиль написання: вони пишуться великими літерами, а як роздільник слів використовується символ підкреслення.
Приклади:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
2. Затінення змінних
Як ми вже казали раніше, не можна в одному методі створити кілька локальних змінних з однаковими іменами. У різних методах — можна.
Але ось те, чого ви, швидше за все, не знаєте: дозволяється, щоб у змінних класу і локальних змінних методу були однакові імена.
Приклад:
| Код | Доступність змінних |
|---|---|
|
|
У методі add ми оголосили локальну змінну sum, і вона до кінця дії методу перекриває (або ще кажуть затінює) собою змінну класу sum.
Ну ок, скажете ви, навіть у якомусь сенсі очікувана поведінка. Але це ще не все. Виявляється, якщо змінну класу затінює локальна змінна, в методі все-таки існує спосіб звернутися до змінної класу. Для цього потрібно перед її ім'ям написати ключове слово this:
this.ім'я
Ось приклад, де конфлікт імен успішно вирішується:
| Код | Доступність змінних |
|---|---|
|
|
Усі змінні count і sum доступні як із ключовим словом this, так і без нього. У тих рядках, де локальна змінна sum затінює змінну класу sum, доступ до змінної класу sum можливий тільки при використанні this.
Якщо затінюється не просто змінна класу, а статична змінна класу, звертатися до неї потрібно не через this, а через ім'я класу:
ClassName.ім'я
Приклад:
| Код | Доступність змінних |
|---|---|
|
|
Усі статичні змінні count і sum доступні як із префіксом у вигляді імені класу Solution, так і без нього. У тих рядках, де локальна змінна sum затінює змінну класу sum, доступ до змінної класу sum можливий тільки при використанні префікса Solution.
3. Змінні всередині циклу for
І ще один маленький, але цікавий факт.
Є ще місце, де особливим чином оголошується змінна — це цикл for.
Якщо ти пам’ятаєш, зазвичай у циклу for в круглих дужках оголошується змінна-лічильник. І яка ж буде видимість цієї змінної? Вона ж не знаходиться в тілі циклу — значить, весь метод? Або ж все-таки ні?
Правильна відповідь така: змінна, оголошена в заголовку циклу for, видна тільки в тілі циклу і в заголовку циклу for.
Приклад:
| Код | Доступність змінних |
|---|---|
|
|
Тому ти завжди можеш у своєму коді послідовно написати кілька циклів із змінною-лічильником з однаковим ім’ям — проблем не виникне.
Приклад:
| Код | Доступність змінних |
|---|---|
|
|
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ