Переменные и типы
Переменная — имя для значения
Программе постоянно нужно хранить данные: возраст пользователя, количество попыток, температуру, ответ «да» или «нет». Для этого в Java используются переменные. У каждой переменной есть имя и тип, а тип определяет, какие значения в ней можно хранить.
int age = 25;
double temperature = 21.5;
boolean online = true;
char grade = 'A';
В первой строке int — тип,
age — имя переменной, а 25 — её начальное значение.
После создания значение переменной можно поменять, но её тип останется тем же.
int score = 10;
score = 15;
Примитивные типы
Для простых значений в Java есть восемь примитивных типов. Их удобно запомнить по назначению:
byte,short,int,long— целые числа;float,double— числа с дробной частью;char— один 16-битный элемент UTF-16;boolean— логическое значениеtrueилиfalse.
В обычном коде для целых чисел чаще всего используется int,
а для дробных — double. Если нужен long
или float, это можно явно показать суффиксом в значении.
int lessons = 12;
long views = 3_000_000_000L;
double progress = 72.5;
float ratio = 0.75F;
char firstLetter = 'J';
boolean completed = false;
Ссылочные типы
Не все данные являются примитивами. Классы, интерфейсы и массивы относятся к ссылочным типам.
Переменная такого типа хранит ссылку на объект либо специальное значение null,
которое означает отсутствие ссылки.
String language = "Java";
String secondLanguage = null;
String здесь выглядит почти так же просто, как int,
но это уже ссылочный тип. Как устроены строки, массивы и объекты, мы разберём в их собственных темах;
сейчас важно различать две большие группы: примитивные и ссылочные типы.
Тип задаёт допустимые значения
Java проверяет типы ещё во время компиляции. Если переменная объявлена как число, в неё нельзя внезапно положить текст. Благодаря этому многие ошибки обнаруживаются ещё до запуска программы.
int count = 10;
count = 12;
// count = "twelve"; // compilation error
Некоторые числовые типы совместимы между собой. Значение более узкого типа может автоматически перейти в более широкий, если данные при этом не теряются. Обратное преобразование нужно указать явно.
int count = 10;
long total = count;
double price = 19.95;
int wholePrice = (int) price;
После последней строки wholePrice будет равен 19:
при таком преобразовании дробная часть отбрасывается.
var — тип без повторения имени типа
Для локальных переменных Java позволяет написать var,
если тип и так можно однозначно определить по начальному значению. Это не делает Java динамически типизированной:
компилятор всё равно определяет конкретный тип один раз, и дальше он не меняется.
var users = 12;
var course = "Java";
// users = "twelve"; // compilation error
У var должно быть начальное значение, из которого компилятор сможет вывести тип.
Использовать его стоит там, где тип и без повторения остаётся очевидным из кода.
Имена должны помогать читать код
Имя переменной лучше выбирать по смыслу данных, а не по их типу или позиции в программе.
Для обычных переменных в Java принят стиль lowerCamelCase:
первое слово начинается со строчной буквы, следующие — с заглавной.
int completedLessons = 7;
double averageScore = 91.5;
boolean premiumEnabled = true;
Теперь объявления вроде int completedLessons = 7; можно читать буквально:
«создай переменную completedLessons типа int
и положи в неё значение 7». Дальше операторы, условия и циклы будут работать
именно с такими значениями и переменными.