Читать книгу Основы программирования с Java - Тимур Машнин - Страница 17
Переменные
ОглавлениеОдин вид идентификатора, который очень часто используется в программе является переменной.
Во многих приложениях необходимо зарезервировать память компьютера для хранения значений, которые будут использоваться в программе.
Переменная представляет собой кусок памяти компьютера, который может хранить значение.
Как правило, такая память выделяется для переменной по запросу программой.
Значение переменной может быть изменено, так что программа должна быть гибкой для обработки различных входных данных.
Например, в программе расчета оценки, переменные examScore, labScore и hwScore могут принимать различные значения в зависимости от входных данных.
Идентификатор finalgrade также является переменной.
Он хранит результат взвешенной суммы, которая зависит от значений входных баллов.
Имя переменной это метка участка памяти.
С точки зрения компьютера, адреса кучи памяти будет достаточно, но для человека, нам нужен хороший способ, чтобы различать и ссылаться на участок памяти.
Аналогией является использование почтовых ящиков, где каждый почтовый ящик помечен его владельцем (или имеет идентификатор) и различные виды почты (или значений) могут быть оставлены в этом почтовом ящике.
Переменная создается через процесс объявления.
Цель объявления, это сделать понятным для компьютера, что имя конкретного идентификатора означает в программе.
Объявление переменной в программе состоит из трех основных частей:
Оно начинается типом данных, далее следует идентификатор и заканчивается точкой с запятой.
Так что с помощью этого синтаксиса объявляется переменная.
Например, в программе CourseGrade, было сделано объявление переменной int examWeight; где int является целочисленным типом данных, examWeight является идентификатором и объявление заканчивается точкой с запятой.
Если вы обратитесь к программе расчета оценки, объявление int examWeight не просто заканчивается сразу после examWeight, но за ним следует "= 70".
В объявлении int examweight = 70, examweight объявляется и инициализируется в одном определении.
Объявление и инициализация также могут быть сделаны отдельно.
В любом случае это приведет к тому же эффекту.
Знак равенства, который вы видите здесь это оператор присваивания, в данном случае, examweight = 70 является утверждением присваивания.
Также вы можете увидеть, что, если программа ссылается на examWeight до инициализации, это приведет к ошибке компиляции.
Хотя Java инициализирует определенные переменные, я поговорю об этом подробнее, когда будем обсуждать классы и объекты, тем не менее это всегда хорошая практика программирования – инициализировать переменную перед ее использованием.
После объявления переменной и инициализации, ее значение может быть изменено с помощью оператора присваивания.
Старое значение, в данном случае, 70 будет удалено и заменено новым значением 50.
Также можно получить значение переменной, ссылаясь на ее имя.
В этом примере со ссылкой на examweight, в правой стороне от знака равенства, значение examweight извлекается, и значение затем присваивается labweight и результат будет храниться в ячейке памяти, выделенной для labWeight.
Иногда мы хотим сохранить значение переменной неизменным на протяжении всей программы, например, идентификаторы для математических констант, таких как пи (PI присваивается значение 3,14159), это постоянная, которую используют для вычисления периметра и площади круга.
В программе CourseGrade, переменные examWeight, labWeight, hwWeight можно рассматривать как константы.
Если вы хотите сделать фиксированными веса для каждого студенты, вы можете предотвратить случайные изменения в значении переменной с помощью "финализации" его значения. Это делается с помощью ключевого слова "final" перед объявлением переменной. Такие переменные часто называют константами.
И вы можете назначить значение для финальной переменной только один раз.
В примере, который мы видели, объявление int examWeight = 70 объявляет и инициализирует examWeight.
Если мы добавим ключевое слово final перед декларацией, эффект проявится в виде блокировки памяти, и значение не может быть изменено снова.
Попытка повторно присвоить значение финальной переменной вызовет ошибку компиляции.
Например, если examWeight была объявлена как финальная, компилятор будет жаловаться при попытке изменить значение examWeight на 50.