Переменные и литералы
Переменная — это именованная ячейка памяти, в которой хранится значение определённого типа. Литерал — это значение, записанное прямо в исходном коде: 42, 3.14, 'A', "Привет", true. Когда вы пишете int x = 42;, x — переменная, а 42 — литерал.
Java — статически типизированный язык: тип переменной задаётся при объявлении и не меняется в течение её жизни. int x всегда будет int, нельзя в ту же переменную положить строку.
С Java 10 появилось ключевое слово var для локального вывода типа: var x = 42; — компилятор сам поймёт, что это int. Но это всё равно статическая типизация — просто тип выводится из инициализатора.
Зачем это нужно
Хранить промежуточные результаты вычислений.
Делать код выразительным: имя
temperatureCelsiusпонятнее, чем магическое число.Защищать значения от изменения через
final.Управлять видимостью и временем жизни данных (локальные, поля, статические).
Пример 1. Объявление и инициализация
public class DeclareInit {
public static void main(String[] args) {
int pin; // объявление
pin = 13; // инициализация
int led = 12; // объявление + инициализация
System.out.println("pin = " + pin);
System.out.println("led = " + led);
}
}
Вывод:
pin = 13
led = 12
Локальную переменную обязательно нужно инициализировать перед использованием — иначе будет ошибка компиляции «variable might not have been initialized».
Пример 2. Целочисленные литералы
public class IntLiterals {
public static void main(String[] args) {
int dec = 255; // десятичный
int hex = 0xFF; // шестнадцатеричный
int oct = 0377; // восьмеричный (начинается с 0)
int bin = 0b1111_1111; // двоичный (с Java 7)
long big = 10_000_000_000L; // long требует суффикс L
System.out.println(dec);
System.out.println(hex);
System.out.println(oct);
System.out.println(bin);
System.out.println(big);
}
}
Вывод:
255
255
255
255
10000000000
Подчёркивания внутри числа (1_000_000) — для читаемости, на значение не влияют. Суффикс L обязателен для long, если значение выходит за пределы int.
Пример 3. Вещественные литералы
public class FloatLiterals {
public static void main(String[] args) {
double pi = 3.14159;
double avogadro = 6.022e23; // 6.022 × 10^23
float gravity = 9.81f; // float требует суффикс f
double small = 1.6e-19;
System.out.println(pi);
System.out.println(avogadro);
System.out.println(gravity);
System.out.println(small);
}
}
Вывод:
3.14159
6.022E23
9.81
1.6E-19
По умолчанию вещественный литерал — double. Если нужен float, добавляйте f: 9.81f.
Пример 4. Символьные и строковые литералы
public class CharStringLiterals {
public static void main(String[] args) {
char letter = 'A';
char digit = '7';
char newline = '\n';
char unicode = 'A'; // тоже 'A'
String greeting = "Привет, AlashEd!";
String escaped = "Строка с \"кавычками\" и \\обратным слешем\\";
System.out.println(letter);
System.out.println(digit);
System.out.print("a");
System.out.print(newline);
System.out.println("b");
System.out.println(unicode);
System.out.println(greeting);
System.out.println(escaped);
}
}
Вывод:
A
7
a
b
A
Привет, AlashEd!
Строка с "кавычками" и \обратным слешем\
char — один Unicode-символ в одинарных кавычках. String — последовательность символов в двойных. Спецсимволы: \n, \t, \", \\, \uXXXX.
Пример 5. Булевы литералы
public class BoolLiterals {
public static void main(String[] args) {
boolean obstacleDetected = true;
boolean motorRunning = false;
if (obstacleDetected && !motorRunning) {
System.out.println("Препятствие, но мотор стоит — безопасно.");
} else {
System.out.println("Внимание!");
}
}
}
Вывод:
Препятствие, но мотор стоит — безопасно.
В Java есть только два булевых литерала: true и false. Никаких 1/0 как в C — это ошибка компиляции.
Пример 6. Константы через final
public class FinalConstants {
public static final int MOTOR_L_ENB = 6;
public static final double WHEEL_DIAMETER_CM = 6.5;
public static final String ROBOT_NAME = "Phobo";
public static void main(String[] args) {
System.out.println("Имя робота: " + ROBOT_NAME);
System.out.println("PWM-пин левого мотора: " + MOTOR_L_ENB);
System.out.println("Диаметр колеса: " + WHEEL_DIAMETER_CM + " см");
// MOTOR_L_ENB = 7; // ошибка компиляции: cannot assign a value to final variable
}
}
Вывод:
Имя робота: Phobo
PWM-пин левого мотора: 6
Диаметр колеса: 6.5 см
final означает «после инициализации больше не меняется». Общепринятое соглашение — имена констант UPPER_SNAKE_CASE.
Пример 7. Локальный вывод типа var
public class VarExample {
public static void main(String[] args) {
var count = 10; // int
var price = 19.99; // double
var name = "Arduino Uno"; // String
var flag = true; // boolean
System.out.println(count + " " + price + " " + name + " " + flag);
}
}
Вывод:
10 19.99 Arduino Uno true
var работает только для локальных переменных, инициализированных в момент объявления. Тип всё равно фиксируется и проверяется компилятором.
Пример 8. Область видимости
public class Scope {
static int classField = 100; // поле класса
public static void main(String[] args) {
int local = 1;
{
int block = 2;
System.out.println(local + " " + block + " " + classField);
}
// System.out.println(block); // ошибка: block недоступна за пределами {}
System.out.println(local);
}
}
Вывод:
1 2 100
1
Переменная видна только в том блоке { }, в котором объявлена. Поля класса (classField) видны во всех методах класса.
Подводные камни
Предупреждение
Имена переменных: должны начинаться с буквы,
$или_(но не с цифры). Camel-case:ledPin,motorSpeedPercent.Зарезервированные слова:
class,int,new,return,static,finalи др. нельзя использовать как имена переменных.int переполняется молча:
int x = 2_000_000_000 + 2_000_000_000;даст отрицательное число, без ошибок.float точность ~7 знаков: для денег используйте
BigDecimal, неdouble/float.Литерал по умолчанию:
3.14— этоdouble. Присвоениеfloat f = 3.14;не скомпилируется — нужно3.14fили явное приведение.``long`` без ``L``:
long big = 10000000000;— ошибка, литерал интерпретируется какintи переполняется ещё до присваивания.
См. также
Hello World на Java — первая программа на Java
Комментарии в Java — комментарии
Типы данных в Java — типы данных
Операторы в Java — операторы
Примечание
Лицензия и источники
Техническое описание адаптировано из официальной документации Oracle Java Tutorials (https://docs.oracle.com/javase/tutorial/), Oracle Free Documentation License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.