Переменные
Чему вы научитесь:
- объявлять переменную с типом, класть в неё новое значение и читать его;
- называть восемь примитивных типов Java и записывать числа вроде
10Lи2.5f; - объявлять переменные через
varи запрещать их изменение словомfinal; - объяснять, почему поле без значения прочитать можно, а локальную переменную — нельзя.
Представьте коробку с наклейкой. На наклейке написано имя, а внутри лежит значение. По имени коробку можно найти, заглянуть в неё или положить туда что-то другое. Программа хранит данные так же — в переменных, именованных значениях, которые можно прочитать и изменить.
У коробки есть и форма. В коробку для целых чисел не положишь текст, а в коробку для текста — число. Форму коробки в Java называют типом, и его указывают сразу, когда заводят переменную.
Прежде чем что-то положить в коробку, её нужно завести и подписать. Java требует объявить переменную до первого использования. Посмотрим, что будет, если этого не сделать:
public class Main {
public static void main(String[] args) {
age = 30; // ✗
System.out.println(age);
}
}error: cannot find symbolКомпилятор не знает имени age: переменную с таким именем никто не объявлял. Сам он её не создаёт, даже когда видит, что в неё что-то кладут.
Объявление переменной
Объявление сообщает компилятору тип и имя новой переменной. Обычно в нём же задают и первое значение:
int age = 30;
System.out.println(age); // 30
System.out.println("age"); // ageСтрока int age = 30; читается слева направо:
int— тип: целое число;age— имя переменной;= 30— начальное значение;;— конец инструкции, как после каждой команды в Java.
Давайте разберём, что печатают две следующие строки:
System.out.println(age)печатает значение переменной —30.System.out.println("age")печатает текст в кавычках — словоage.
Разница только в кавычках. Без них Java ищет переменную с таким именем, а с ними печатает сам текст.
Сначала объявить, потом присвоить
Объявить переменную можно и без значения, а положить его позже:
int score;заводит коробку для целого числа, пока без значения;score = 10;кладёт в неё10.
Пока в score ничего не положили, читать её нельзя. Компилятор следит за этим и не пропустит программу, которая читает переменную раньше, чем ей дали значение.
Присваивание и копия значения
Оператор = кладёт в уже объявленную переменную новое значение, а старое пропадает. Такая операция называется присваиванием. Теперь посмотрим, что происходит, когда справа от = стоит другая переменная:
int a = 3;
int b = a;
a = 5;
System.out.println(a); // 5
System.out.println(b); // 3Разберём по строкам:
int a = 3;заводит коробкуaи кладёт в неё3.int b = a;заводит коробкуbи кладёт в неё копию того, что лежит вa, — число3.a = 5;меняет толькоa.System.out.println(a)печатает5.System.out.println(b)печатает3: вbсвоя тройка, и заaона не следит.
Строка int b = a не связывает две переменные навсегда. Она один раз копирует значение, и дальше каждая коробка живёт сама по себе. В виджете та же программа и ещё две строки: нажимайте «Следующий шаг» и следите, что лежит в a и b.
1public class Main {2 public static void main(String[] args) {3 int a = 3;4 int b = a;5 a = 5;6 System.out.println(a);7 System.out.println(b);8 b = 7;9 System.out.println(a);10 }11}
Программа начинается с main, переменных пока нет.
Здесь картинка с коробкой неточна. Настоящую вещь из коробки можно только переложить, и коробка опустеет. А int b = a кладёт в b копию, и в a всё остаётся на месте. Чтение тоже ничего не забирает: после System.out.println(a) в a лежит то же число.
Имена переменных
Имя выбирают так, чтобы по нему было понятно, что лежит внутри: age, price, itemCount. Правила такие:
- имя начинается с буквы и состоит из букв, цифр и знака подчёркивания
_; - составные имена пишут слитно, каждое следующее слово с заглавной буквы:
itemCount,maxSpeed; - регистр важен:
ageиAge— две разные переменные; - ключевые слова Java, например
intилиclass, именами быть не могут.
Частая ошибка
Переменную объявили без значения и сразу прочитали:
int score;
System.out.println(score); // ✗error: variable score might not have been initializedПрограмма не компилируется. Переменная, объявленная внутри main, сама никакого значения не получает, а компилятор проверяет, что перед каждым чтением в неё что-то положили. Дайте значение до чтения, например int score = 0;, и программа напечатает 0.
Главное
- Переменную объявляют до первого использования: тип, имя и обычно начальное значение —
int age = 30;. =кладёт в переменную новое значение, а старое пропадает.int b = aкопирует значение один раз, поэтомуa = 5после этого не меняетb.- Переменную внутри
mainнельзя прочитать, пока ей не дали значение, — иначе программа не скомпилируется.