Бесплатный открытый урок: восемь примитивных типов Java, строки, константы, целочисленное деление, переполнение и погрешность дробных чисел. Все примеры проверены на JDK 21.
Переменная — это имя, тип и значение
Java — язык со статической типизацией: тип переменной указывается при объявлении и больше не меняется. Компилятор проверяет типы до запуска, поэтому часть ошибок видна ещё в редакторе.
public class Peremennye {
public static void main(String[] args) {
int vozrast = 30;
long naselenie = 8_100_000_000L;
double ves = 72.5;
boolean student = true;
char bukva = 'A';
String imya = "Анна";
System.out.println(imya + ", возраст " + vozrast);
System.out.println("Население: " + naselenie);
System.out.println("Вес: " + ves);
System.out.println("Студент: " + student);
System.out.println("Буква: " + bukva);
}
}
Анна, возраст 30
Население: 8100000000
Вес: 72.5
Студент: true
Буква: A
Подчёркивания в числе 8_100_000_000L компилятор игнорирует — они нужны только человеку. Суффикс L обязателен: без него литерал считается int и не помещается в диапазон.
Какие типы бывают
- Целые:
byte(−128…127),short,int(примерно ±2,1 млрд),long. По умолчанию беритеint, а для денег в копейках, идентификаторов и времени в миллисекундах —long. - Дробные:
floatиdouble. По умолчанию —double. - Логический:
booleanсо значениямиtrueиfalse. Числа вместо них не подходят: в Java1не равноtrue. - Символ:
charв одинарных кавычках:'A'. - Строка:
Stringв двойных кавычках. Это не примитив, а объект, и сравнивать строки нужно методомequals, а не оператором==.
Имена переменных пишут в стиле camelCase со строчной буквы: vozrastKlienta, а не VozrastKlienta и не vozrast_klienta. Компилятору всё равно, но так пишут все, и чужой код станет читаться привычно.
Деление целых чисел и остаток
Самая частая ошибка новичка в арифметике: если оба операнда целые, деление тоже целое, дробная часть отбрасывается ещё до присваивания.
public class Delenie {
public static void main(String[] args) {
int a = 7;
int b = 2;
System.out.println(a / b);
System.out.println(a % b);
System.out.println(a / (double) b);
int maksimum = Integer.MAX_VALUE;
System.out.println(maksimum);
System.out.println(maksimum + 1);
System.out.println(0.1 + 0.2);
}
}
3
1
3.5
2147483647
-2147483648
0.30000000000000004
7 / 2даёт 3, а не 3.5: чтобы получить дробь, хотя бы один операнд должен быть дробным — этим и занимается(double) b.%— остаток от деления, им удобно проверять чётность:x % 2 == 0.- Переполнение
intне считается ошибкой: значение молча «переворачивается» в минус. Для больших чисел беритеlong. 0.1 + 0.2не равно0.3:doubleхранит числа в двоичной дроби. Деньги вdoubleне считают — используют целые копейки илиBigDecimal.
Приведение типов и форматирование
Расширяющее преобразование (int → double) Java делает сама. Сужающее — только явным приведением, и оно отбрасывает дробную часть, а не округляет. Для округления есть Math.round.
import java.util.Locale;
public class Tochnost {
public static void main(String[] args) {
double cena = 1234.5678;
System.out.println((int) cena);
System.out.println(Math.round(cena));
System.out.printf(Locale.ROOT, "%.2f%n", cena);
System.out.printf(Locale.forLanguageTag("ru"), "%.2f%n", cena);
}
}
1234
1235
1234.57
1234,57
Обратите внимание на две последние строки: разделитель дробной части зависит от локали. Если её не задать явно, один и тот же код напечатает 1234.57 на сервере и 1234,57 на домашнем компьютере с русскими настройками. В уроке локаль указана явно, поэтому результат одинаков везде.
Константы
Слово final запрещает менять значение после инициализации. Такой код не компилируется:
final double stavka = 0.13;
stavka = 0.15;
Компилятор ответит cannot assign a value to final variable stavka. Не компилируется и попытка молча потерять точность:
int kolichestvo = 3.5;
Здесь будет incompatible types: possible lossy conversion from double to int. Java требует, чтобы потеря данных была написана явно: (int) 3.5.
Задание для самопроверки
- Посчитайте, сколько полных часов и сколько оставшихся минут в 500 минутах. Используйте
/и%. - Переведите 25 °C в градусы Фаренгейта по формуле
F = C * 9 / 5 + 32. Сравните результат при целых и при дробных операндах. - Объявите
final int GOD = 2026;и попробуйте изменить значение. Прочитайте сообщение компилятора.
Что дальше
Предыдущий урок — первая программа на Java, следующий — ветвления: if, else и switch. Все бесплатные занятия собраны в разделе «Уроки Java».