Переменные и Константы в 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;) — посмотрите, какую ошибку выдаст компилятор, и запишите пояснение в комментариях к коду.

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

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

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


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

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

Go vs Java -  сравнение модели памяти: happens-before, visibility, reorder, synchronization events, write/read barriers
Модель памяти — это слой между программой и процессором. Современные CPU агрессивно оптимизируют выполнение: инструкции могут переставляться, данные могут храниться в кешах ядер, а операции могут выпо...
Разбор Unit testing, Race detector, Benchmarking, Profiling (pprof) Go vs Java | Testing, Debugging и Profiling
1. Unit testing В Go встроенный пакет testing позволяет писать unit-тесты. Для Java-разработчиков это аналог JUnit/TestNG. Unit-тесты в Go просты и встроены в стандартную библиотеку. Для Java при...
Современный подход к параллелизму в Java - Fork/Join Framework, CompletableFuture и виртуальные потоки (Project Loom)
Предисловие Мир программного обеспечения уже давно перестал быть спокойным океаном: сегодня это бурная экосистема, где каждая миллисекунда отклика приложения может стоить компании клиентов, репутации ...

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

Resource cleanup, rate‑limiting strategies, bounded vs unbounded channels - в Go vs Java | Паттерны, идиомы и лучшие практики Go
Продолжаем серию статей для разработчиков, которые хотят изучить Go на основе знаний Java, и наоборот. В этой статье мы обсудим три ключевые темы: Resource Cleanup (освобождение ресурсов), Rate-Limiti...
Разбираем: Rate‑limiter, non‑blocking operations, scheduler  Go vs Java | Concurrency часть 4
Эта статья посвящена пониманию принципов работы с конкурентностью и синхронизацией в Go и Java. Мы рассмотрим ключевые подходы, такие как rate‑limiter, неблокирующие операции и планирование задач, сра...
Разбираем: Trace, Profiling, Integration Testing, Code Coverage, Mocking, Deadlock Detection в Go vs Java | Testing, Debugging и Profiling
Серия: Go для Java-разработчиков — разбор trace, профилирования и тестирования В этой статье мы разберем инструменты и практики для тестирования, отладки и профилирования в Go. Для Java-разработчика ...
Fullscreen image