Переменные и типы данных — 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, а нужно одинарные
Поч