Если вы хотите отделить два слова в качестве идентификатора, следует использовать подчеркивания.
И не путайте подчеркивания "_" с дефисом "-", дефис "-" не может быть использован в качестве идентификатора, так как это можно было бы интерпретировать как минус.
2017y является недействительным идентификатором, потому что он начинается с цифры.
И один последний пример недопустимого идентификатора является int, так как int является зарезервированным словом в Java и используется для объявления определенного идентификатора в виде целого числа.
Таким образом, еще одно правило в том, что зарезервированные слова не могут быть использованы в качестве идентификатора.
Давайте посмотрим на то, что является зарезервированным словом. Не трудно найти зарезервированные слова в нашей повседневной жизни.
Для названий доменов в Интернете, .gov зарезервирован для государственных организаций, .edu зарезервирован для учебных заведений. Точно так же, и Java использует некоторые зарезервированные слова.
В таблице здесь показаны некоторые из зарезервированных слов Java.
Этот список неполон, но охватывает большую часть зарезервированных слов, которые будут использоваться в этой книге.
Различные программисты могут следовать разным стилям программирования, но есть определенные часто используемые стили, которые могли бы улучшить читаемость вашей программы. То есть, сделать проще для других понимание вашей программы.
Вот некоторые правила для названий идентификаторов Java.
Важно, чтобы использовались значимые имена. Использование бессмысленных названий, таких как х, у, г следует заменить более значимыми именами, такими как radius, area, score если это возможно. Для длинных имен, полезно использовать смешанный регистр, то есть, смесь нижнего регистра и заглавных букв, разделяя слова, используя заглавные буквы.
Эти заглавные буквы обычно называются CamelCase, как горбы верблюдов. И есть два типа CamelCase, нижний верблюд начинается со строчной буквы, например, examScore и areaOfCircle. Нижний CamelCase обычно используется в Java для переменных и методов.
Существует также верхний CamelCase, который начинается с буквы верхнего регистра, и который обычно используется для именования классов.
В предыдущих примерах, HelloWorld и CourseGrade являются именами классов, которые начинаются с заглавных букв.
Вот еще один пример объявления для класса BankAccount.
Мы обсудим подробнее позже, что означают методы и классы.
Вопросы
Задача
Просьба указать допустимый идентификатор Java из списка ниже.
1. Last_Name
2. 1dentifier
3. You&Me
4. COMP-102
Ответ: 1
Переменные
Один вид идентификатора, который очень часто используется в программе является переменной.
Во многих приложениях необходимо зарезервировать память компьютера для хранения значений, которые будут использоваться в программе.
Переменная представляет собой кусок памяти компьютера, который может хранить значение.
Как правило, такая память выделяется для переменной по запросу программой.
Значение переменной может быть изменено, так что программа должна быть гибкой для обработки различных входных данных.
Например, в программе расчета оценки, переменные 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.
Типы данных
Тип данных является очень важным понятием в языке программирования высокого уровня.
Java является строго типизированным языком программирования.
Это означает, что должны быть определены все типы имен, упомянутых в программе Java, прежде чем они могут быть использованы.
Мы только что видели, что способом объявить переменную является указание типа.
Мы использовали тип int для целого числа в предыдущих примерах.
Другие типы данных также поддерживаются Java.
Каждый тип данных имеет свои свойства и требования к пространству памяти.
Это позволяет компьютеру сделать выделение памяти, когда программа выполняется, так как различные типы данных имеют разные требования к размеру памяти.
Свойства типа данных включают в себя набор значений, которые он может взять на себя и набор операторов, которые могут применяться к этим значениям.
Например, значение целого числа может отрицательным, положительным или нулевым, и операции, которые могут быть выполнены для целого числа включают + сложение, вычитание, * умножение и / деление.
Набор значений известен как домен для этого типа.
Java поддерживает восемь простых типов данных в рамках 4-х основных категорий, а именно целые числа, числа с плавающей точкой, символы и логические значения.
byte, short, int и long являются различными целочисленными типами, которые занимают разное количество памяти.
float и double представляют числа с плавающей точкой, то есть, числа с дробной частью.
Значения, сохраненные в float и double типах, являются только приблизительными.
Существует также тип char для символов, представленных 16-битным стандартом Unicode.
boolean это тип данных, которые могут взять на себя только два возможных значения, истина и ложь.
Сначала мы сконцентрируемся на целых числах и числах с плавающей точкой и вернемся к char и логическим типам позже.
Среди 4 целых типов:
byte это 8-разрядные целые числа, со значениями в диапазоне от -128 до 127,
short составляет 16 бит,
int 32 бита и
long 64 бита, соответствующие диапазоны значений приведены в этой таблице.
Основное преимущество целочисленного представления в том, что оно представляет собой точное значение без приближения, но оно не может представлять значения с плавающей запятой и его область значений ограничена.
Хотя long может составлять до 2 в 63-й степени, его диапазон по-прежнему намного меньше, чем float или double.
В таблице здесь показан диапазон значений, которые могут быть представлены float, который использует 32 бита и double, использующий 64 бита.
Как вы можете видеть, это астрономические цифры.
Выражения
При написании программ, выражения часто используются как строительные блоки для определения действий, которые программа предполагает выполнить.
Существует два типа выражений арифметические выражения и логические выражения.
Примером арифметического выражения может служить вычисление окончательной оценки как взвешенной суммы оценок, как мы видели в программе СourseGrade.
Примером логического выражения может служить действие проверки студента на получение оценки.
Сначала остановимся на арифметических выражениях, а затем рассмотрим логические выражения, когда будем говорить о разветвленных выражениях.
Арифметическое выражение это последовательность операндов, включающих переменные и константы или литералы, соединенные арифметическими операторами, такими как +, -, * & / .
Мы уже обсуждали переменные и константы.
И первым примером здесь будет использование литералов.
Арифметическое выражение 2+3 соединяет два литерала 2 и 3, используя оператор сложения.
Второй пример, это арифметическое выражение для преобразования температуры из Цельсия в Форенгейт:
Цельсий*9/5+32
Цельсий, это переменная, 9, 5 и 32 литералы, и литералы соединены тремя операторами *, / и +.
Позже, вы обнаружите, что, если это будет использовано как Java выражение, возникнет ошибка вычисления.
Вы узнаете, что я имею в виду, когда мы будем говорить о делении целых чисел.
Так что вы видите, что литерал, это константное значение, которое появляется непосредственно в Java программе.
И существует два типа численных литералов в Java это целочисленные литералы и литералы с плавающей запятой.
Здесь показаны некоторые примеры литералов.
Заметьте, что для переменной aFloat значение установлено 10.0f с суффиксом f после 10.0 это потому, что литерал с плавающей запятой 10.0 представлен как double с размером 64 bit, в то время как float имеет размер 32 bit.
Присвоение double в float ведет потенциально к потере информации, и Java компилятор будет жаловаться, если суффикс f отсутствует.
Я поговорю о преобразовании типов позже.
Также присвоение 1000 в byte, который может содержать только целое значение до 128, приведет к ошибке компиляции, потому что литерал слишком большой, чтобы поместиться в переменную.
Здесь показаны общераспространенные арифметические операторы.
Операторы +, и * довольно простые, однако оператор деления целых чисел слегка хитрый.
Например, если 2 разделить на 3, результат будет 0.
Оператор модуля, который представлен знаком процентов, дает остаток от деления первого операнда на второй операнд.
Например, 2 модуль 3 возвращает 2 как результат.
Оператор модуля в Java работает также для чисел с плавающей запятой.
Рассмотрим другой пример использования оператора модуля.
Когда переменная со значением 104 делится на другую переменную b со значением 3, результат будет 34 с остатком 2.
Числовые значения хранятся как целые числа или числа с плавающей запятой.
Для целочисленного деления результат, это целая часть деления, десятичная часть результата игнорируется.
Другими словами, целочисленное деление всегда возвращает целое число путем усечения без округления.
При этом может быть потеряна информация, когда десятичная часть отсекается.
Например, при делении 2 на 3 результат должен быть 0.66, но мы получаем 0 из-за отсечения.
Или 3 делим на 2 и получаем 1 вместо 1.5.
Если вы делите double на double, результат будет double, как и ожидалось.
Теперь вопрос, как Java оперирует со смешанными делениями, включающими целые числа и числа с плавающей запятой?
В общем, деление double дает double.
Когда целое делится на double или double делится на целое, результатом будет double.
Это позволяет программе максимально сохранить информацию.
Например, если 2 делится на 3.0, результатом будет 0.6666 вместо 0.
Также, деление 3.0 на 2 даст результат 1.5.
Деление двух double 10.0 и 2.0 даст результат double 5.0.
Когда выражение вычисляется, мы должны определить порядок для выполнения операций, если в выражении больше одного оператора.
Когда мы изучали алгебру, мы узнали, что операции * умножения и / деления выполняются перед операциями + сложения и вычитания, и такое же правило действует и в Java.
Например, в выражении m*x + b, m умножается на x перед прибавлением b к результату умножения.
Приоритет операторов задает порядок, в котором различные операторы выражения вычисляются.
Здесь показан стандартный порядок, которому следует Java:
( )
* / %
+
Выражение, заключенное в круглые скобки, вычисляется первым.
Для вложенных скобок внутреннее выражение вычисляется первым.
Операторы * умножения, / деления и % остатка вычисляются вторыми, и, если их несколько, вычисление идет слева направо.
Операторы сложения и вычитания вычисляются после остальных операторов, и, если их несколько, вычисление идет слева направо.
Другая важная вещь в вычислении выражений, это концепция ассоциативности.
Ассоциативность используется для определения порядка, в котором операторы с одинаковым приоритетом вычисляются в выражении.
Правило ассоциации в этом примере, это вычисление слева направо, и называется левой ассоциативностью.
При этом круглые скобки могут быть вставлены для усиления порядка вычисления.