☕ Java

Переменные и типы данных — Java

Что это и зачем?

Представь, что ты играешь в компьютерную игру. У тебя есть инвентарь — рюкзак, в котором лежат разные предметы: меч, зелье здоровья, карта сокровищ. В программировании такой «рюкзак» называется переменной. Это коробочка, в которую можно положить какую-то информацию и дать ей имя.

Зачем это нужно? Допустим, ты пишешь программу, которая поздравляет пользователя с днём рождения. Имя пользователя может быть разным — сегодня «Маша», завтра «Петя». Вместо того чтобы каждый раз переписывать код, ты создаёшь переменную имя и один раз записываешь туда нужное имя. Программа сама подставит его в текст поздравления!

Теперь про типы данных. Вернёмся к рюкзаку. Ты не будешь класть яблоки в карман для монет, а монеты — в карман для карты. В Java тоже есть разные «карманы» для разных вещей:

  • Числа (целые и дробные)
  • Слова и буквы (текст)
  • Правда/ложь (да или нет)

Java — строгий язык. Он требует заранее сказать: «В этой коробочке будут только целые числа!» или «Здесь только текст!». В Python такого нет — там можно положить что угодно куда угодно. Но в Java это помогает избежать ошибок. Представь, что ты по ошибке положил в карман для монет воду — монеты испортятся. Java не даст тебе этого сделать!

Давай разберёмся по порядку. Сначала научимся создавать переменные, а потом узнаем, какие бывают типы данных и зачем они нужны.

Примеры кода с объяснением

Пример 1: Первая переменная — привет, мир!

Начнём с самого простого. Создадим переменную, которая хранит текст (слово или фразу). В Java для текста используется тип String (с большой буквы!).

// Объявляем (создаём) переменную с именем "приветствие"
// Тип String — значит, будем хранить текст
String приветствие;

// Теперь кладём в неё значение (текст в кавычках)
приветствие = "Привет, мир!";

// А теперь выводим содержимое переменной на экран
System.out.println(приветствие);
// На экране появится: Привет, мир!

Объяснение для новичка:

  • String — это тип «строка» (текст). В Python ты бы написал просто приветствие = "Привет, мир!", а в Java нужно сначала сказать, какого типа будет переменная.
  • Точка с запятой ; в конце каждой команды — это как точка в конце предложения. Java без неё не поймёт, где заканчивается команда.
  • System.out.println() — команда «напечатай и перейди на новую строку». Как print() в Python.

Можно объединить создание и присваивание в одну строку:

// Создаём переменную и сразу кладём в неё значение
String имя = "Алиса";

System.out.print("Привет, ");
System.out.println(имя);
// На экране: Привет, Алиса

Обрати внимание: System.out.print() (без ln) не переводит курсор на новую строку, а печатает дальше на той же строке.

Пример 2: Целые числа — считаем яблоки

Для целых чисел (без дробной части) в Java есть тип int (от integer — целое число).

// Объявляем переменную для количества яблок
int яблоки;

// Кладём число 10
яблоки = 10;

// Можно делать математику!
int груши = 5;          // создали и сразу положили 5
int всего_фруктов;      // просто создали, пока пусто

// Складываем яблоки и груши
всего_фруктов = яблоки + груши;

// Выводим результат
System.out.print("Всего фруктов: ");
System.out.println(всего_фруктов);
// На экране: Всего фруктов: 15

Что важно запомнить:

  • Имена переменных пишутся слитно или с подчёркиванием. Нельзя использовать пробелы.
  • Математика работает как в жизни: +, -, * (умножить), / (разделить).
  • В Java, в отличие от Python, нельзя просто написать яблоки = "десять", если переменная объявлена как int. Java скажет: «Ошибка! Ты обещал число, а даёшь текст!»

Попробуем посчитать, сколько яблок достанется каждому, если разделить поровну на 3 друзей:

int яблоки = 10;
int друзей = 3;

// Делим яблоки на друзей (внимание! целое число делить на целое — получится целое)
int каждому = яблоки / друзей;

System.out.println("Каждому другу достанется " + каждому + " яблок");
// На экране: Каждому другу достанется 3 яблок

Подвох: 10 разделить на 3 — это 3.333..., но int отбрасывает дробную часть! Java не округляет, а просто отрезает «хвост». Если нужно точное деление, используй double (смотри следующий пример).

Пример 3: Дробные числа — деньги и рост

Для чисел с дробной частью (например, 3.14 или 2.5) в Java есть типы double и float. Мы будем использовать double — он точнее.

// Цена пиццы — 450 рублей 50 копеек
double цена_пиццы = 450.50;

// Сколько пицц купим?
int количество = 3;

// Считаем общую стоимость
double общая_стоимость = цена_пиццы * количество;

System.out.println("Общая стоимость: " + общая_стоимость + " рублей");
// На экране: Общая стоимость: 1351.5 рублей

Важно! В Java десятичная часть отделяется точкой, а не запятой. 450,50 вызовет ошибку. Запомни: точка — это «дробная запятая» для компьютера.

Ещё пример — считаем средний балл в школе:

double математика = 4.5;
double русский = 3.0;
double физика = 5.0;

// Складываем и делим на количество предметов
double средний_балл = (математика + русский + физика) / 3;

System.out.println("Средний балл: " + средний_балл);
// На экране: Средний балл: 4.166666666666667

Видишь, сколько цифр после запятой? Это нормально. Если нужно показать только две цифры, существуют специальные способы форматирования, но для начала хватит и так.

Пример 4: Логический тип — правда или ложь

Иногда нужно хранить ответ «да» или «нет». В Java для этого есть тип boolean (назван в честь математика Буля). Он принимает только два значения: true (истина) или false (ложь).

// Включён ли свет?
boolean свет_включён = true;

// Есть ли у пользователя пропуск?
boolean есть_пропуск = false;

// Можно ли войти? (нужен пропуск И свет)
boolean можно_войти = есть_пропуск && свет_включён;

System.out.println("Можно войти? " + можно_войти);
// На экране: Можно войти? false

Логические операторы (как в математике):

  • && — «И» (и то, и другое должно быть правдой). Как умножение: 1*1=1, 1*0=0.
  • || — «ИЛИ» (хотя бы одно должно быть правдой). Как сложение: 1+0=1, 0+0=0.
  • ! — «НЕ» (отрицание). Если было true, станет false, и наоборот.

Пример с возрастом для входа на аттракцион:

int возраст = 12;
boolean разрешено = (возраст >= 10) && (возраст <= 16);

System.out.println("Можно кататься? " + разрешено);
// На экране: Можно кататься? true (потому что 12 между 10 и 16)

Обрати внимание: >= означает «больше или равно», <= — «меньше или равно». Это как в математике.

Пример 5: Символы и особенности типов

Кроме текста (String) есть тип для одного символа — char. Он хранит одну букву, цифру или знак. Символы пишутся в одинарных кавычках!

// Один символ — буква 'A'
char первая_буква = 'A';

// Можно хранить цифру как символ (не путать с числом!)
char цифра = '7';

// Символ пробела
char пробел = ' ';

System.out.println("Первая буква: " + первая_буква);
System.out.println("Цифра как символ: " + цифра);
// На экране:
// Первая буква: A
// Цифра как символ: 7

Разница между char и String:

  • char — только один символ, в одинарных кавычках: 'a'
  • String — много символов (строка), в двойных кавычках: "Привет"

В Python нет отдельного типа для символа — там всё строки. В Java же строго: один символ — это char, несколько — String.

Попробуем сложить символы? Это даст числовой код символа (в Java символы хранятся как числа по таблице Unicode):

char буква = 'A';
int код = буква; // неявное преобразование — Java сама превратит символ в число

System.out.println("Код буквы A: " + код);
// На экране: Код буквы A: 65

Это как секретный шифр: каждой букве соответствует число. 'A' — 65, 'B' — 66, и так далее.

Типичные ошибки

Давай разберём ошибки, которые чаще всего делают новички в Java. Я покажу неправильный код и объясню, почему он не работает.

Ошибка 1: Забыли указать тип

// НЕПРАВИЛЬНО!
имя = "Вася"; // Java не знает, что такое "имя" — переменная не объявлена

Почему? В Java нельзя просто взять и написать имя = "Вася". Сначала нужно объявить переменную: String имя;. В Python это работает, а в Java — нет. Java строгая: «Скажи мне сначала, какого типа будет твоя коробка!»

Как исправить:

String имя; // объявили
имя = "Вася"; // теперь можно

Ошибка 2: Несоответствие типов

// НЕПРАВИЛЬНО!
int число = "пять"; // текст в кавычках нельзя положить в int

Почему? Переменная int хранит только числа. Текст — это String. Java не позволяет смешивать. Ошибка будет: «несовместимые типы».

Как исправить: Используй правильный тип:

String число = "пять"; // теперь текст хранится в String
int число2 = 5; // число хранится в int

Ошибка 3: Забыли точку с запятой

// НЕПРАВИЛЬНО!
int a = 5
int b = 10 // забыли ; после 5

Почему? Java думает, что команда не закончена. Каждая инструкция должна заканчиваться ;. Это как точка в конце предложения.

Как исправить: Всегда ставь ; в конце строки с командой. Исключение — только блоки с фигурными скобками {}.

Ошибка 4: Деление целых чисел даёт целый результат

// НЕПРАВИЛЬНО (если ожидаешь дробный результат)
int a = 10;
int b = 3;
double результат = a / b; // думаешь, будет 3.333, а будет 3.0!

Почему? Когда делишь два int, Java сначала делает целочисленное деление (отбрасывает дробную часть), и только потом сохраняет результат в double. Получается 3, а не 3.333.

Как исправить: Хотя бы одно число сделай дробным:

double a = 10.0; // или 10.0
int b = 3;
double результат = a / b; // теперь 3.333...

Или используй приведение типов (превращение одного типа в другой):

int a = 10;
int b = 3;
double результат = (double) a / b; // (double) временно превращает a в double

Ошибка 5: Путаница с кавычками

// НЕПРАВИЛЬНО!
String текст = 'Привет'; // одинарные кавычки для char, а нужно двойные
char буква = "A"; // двойные кавычки для String, а нужно одинарные

Поч