Переменные и Константы в Java

Переменные в Java — понятие, типы, область видимости и константы

Всем привет! С вами Виталий Лесных. В этом уроке разберём, что такое переменные в Java, зачем они нужны, какие бывают типы, как объявлять и инициализировать, что такое динамическая инициализация, область действия (scope), время жизни и константы.

Что такое переменная

Переменная — это именованная ячейка памяти, в которой можно хранить значение и затем с ним работать. Переменные нужны, чтобы программа могла хранить данные и манипулировать ими.

Синтаксис объявления переменной

Общее: <тип> <имя>;


// объявление
int a;

// объявление + инициализация
int b = 5;
  

Правила именования переменных

  • Имя не должно начинаться с цифры (1var — ошибка).
  • Нельзя использовать зарезервированные слова (например, if, while, int, break и т.д.).
  • Можно использовать буквы, цифры (не в начале), символы _ и $, но привычный стиль — camelCase.
  • Регистр имеет значение: myVar и myvar — разные переменные.

Примеры корректных имён


int age;
double accountBalance;
String userName;
int _temp;
int $price; // допустимо, но необычно
  

Основные типы данных (кратко)

Примитивные типы — наиболее часто используемые:

  • boolean — логическое значение: true или false.
  • byte — 8 бит, диапазон от -128 до 127.
  • short — 16 бит.
  • int — 32 бита, самый распространённый целочисленный тип.
  • long — 64 бита, для больших целых чисел (пишут с суффиксом L при инициализации).
  • float — 32-битное число с плавающей точкой (суффикс f при инициализации).
  • double — 64-битное число с плавающей точкой, чаще используется для дробей.
  • char — символ (2 байта, Unicode).

Код — примеры типов


boolean flag = true;
byte b = 127;
short s = 32000;
int i = 1_000_000;
long l = 12345678900L;
float f = 3.14f;
double d = 3.1415926535;
char ch = 'A';
  

Объявление vs Инициализация

Объявление резервирует имя и тип. Инициализация присваивает значение.


// объявление
int x;

// инициализация (присваивание)
x = 10;

// объявление + инициализация
int y = 2;
  

Динамическая инициализация

Переменная может получать значение, вычисленное в момент выполнения:


int a = 1, b = 2, c = 3;
int volume = a * b * c; // динамическая инициализация: вычисляем на основе других переменных
System.out.println("Volume = " + volume); // выведет 6
  

Область видимости (scope) и время жизни

Область видимости переменной определяется фигурными скобками { ... }. Переменная доступна только внутри того блока, где она объявлена. Когда выполнение покидает блок — переменная «уничтожается» (в смысле недоступности).

Пример: вложенные области


int a = 1;
if (a == 1) {
    int b = 2; // b доступна только внутри этого блока
    System.out.println(a + b); // OK
}
// System.out.println(b); // ОШИБКА: b не видна здесь
  

Инициализация внутри блока

Если объявить переменную выше, а инициализировать внутри блока — при каждом входе в блок её значение может меняться или быть переинициализировано.


int b; // объявлена вне цикла
for (int a = 0; a < 3; a++) {
    b = 0; // инициализируем внутри цикла
    b++;
    System.out.println("a=" + a + " b=" + b); // b всегда покажет 1
}
  

Если же b инициализировать вне цикла и увеличивать внутри — она будет накапливать значение:


int b = 0;
for (int a = 0; a < 3; a++) {
    b++;
    System.out.println("a=" + a + " b=" + b); // b: 1, 2, 3
}
  

Ограничение: нельзя объявлять одинаковые имена во вложенных областях

В Java нельзя объявить переменную с тем же именем в вложенной области — это даст ошибку компиляции.

Константы

Константа — значение, которое нельзя изменить после присвоения. В Java используется ключевое слово final.


final int DAYS_IN_WEEK = 7;
System.out.println(DAYS_IN_WEEK);
// DAYS_IN_WEEK = 8; // ОШИБКА: нельзя перезаписать константу
  

Рекомендации

  • Выбирайте минимально подходящий тип (не занимайте лишнюю память без нужды).
  • Используйте понятные имена переменных (например, totalPrice вместо tp).
  • Объявляйте переменные в минимально необходимой области видимости.
  • Константы — в верхнем регистре с подчёркиваниями: MAX_USERS.

Домашнее задание

Проверьте себя — выполните задачи:

  1. Объявите переменные всех примитивных типов в Java и выведите их значения в консоль (для long и float используйте суффиксы L и f соответственно).
  2. Напишите программу, которая вычисляет объём параллелепипеда: ввод сторон a, b, c (как int) и выводит volume (динамическая инициализация).
  3. Покажите пример, где переменная объявлена вне блока, а инициализируется внутрь — продемонстрируйте разницу в поведении при инициализации внутри и снаружи цикла.
  4. Создайте константу для максимального количества попыток (final int MAX_ATTEMPTS = 3;) и используйте её в условии (например, счётчик попыток).
  5. Попробуйте объявить переменную с именем зарезервированного слова (например, int if = 5;) — посмотрите, какую ошибку выдаст компилятор, и запишите пояснение в комментариях к коду.

Совет: размещайте переменные как можно ближе к месту их использования — так код будет более читабельным и безопасным.

Удачи в практике!

Тест — Насколько ты понял урок?


🌐 in English
Всего лайков:0

Оставить комментарий

Мой канал в социальных сетях
Отправляя email, вы принимаете условия политики конфиденциальности

Полезные статьи:

Stream vs For в Java: как писать максимально быстрый код
В Java производительность часто определяется не «красотой кода», а тем, как именно он взаимодействует с памятью, JIT-компилятором и CPU cache. Разберём, почему обычный for часто быстрее Stream, и как ...
Channel direction и select patterns в Go vs Java | Паттерны, идиомы и лучшие практики Go
← Связанные статьи: Context, propagation и cancellation patterns в Go vs Java | Паттерны, идиомы и лучшие практики Go 1. Channel direction — направление каналов В Go каналы могут быть односторонн...
Context, propagation и cancellation patterns в Go vs Java | Паттерны, идиомы и лучшие практики Go
← Связанные статьи: Часть 1 — Error handling и defer в Go (Параллельность и синхронизация) | Паттерны, идиомы и лучшие практики Go 1. Context и его роль В Go context.Context используется для пере...

Новые статьи:

Конкурентность — это не про «запустить много потоков». Это про договорённости между ними. Представь кухню ресторана: — повара (потоки / горутины) — заказы (задачи) — и главный вопрос: как они коорди...
История начинается не с академической теории, а с типичной production-проблемы. Представьте сервис: 48 CPU 300+ потоков нагрузка 200k операций в секунду много shared state Команда использует обы...
Когда HashMap начинает убивать продакшн: инженерная история ConcurrentHashMap
Представьте обычный продакшн-сервис. 32 CPU сотни потоков кэш конфигурации / сессий / rate limits десятки тысяч операций в секунду И где-то внутри — обычный Map. Сначала всё выглядит безобидно. Map&...
Fullscreen image