Глава 5.2. Лексические соглашения

5.2.1. Структура программ на языке Java

Программа на языке Java — это текст, состоящий из идентификаторов, ключевых слов, констант, разделителей, символов операций и комментариев. Приведем классический пример (эта программа выводит на экран строку Hello, world):

class Test {
  // главная программа
  public static void main(String args[]) {
    System.out.println("Hello, world");
  }
}

Для удобства чтения программы и форматирования ее текста могут использоваться символы пробела. Эти символы игнорируются всюду, кроме строковых и символьных констант, в которых они являются значимыми. Символами пробела в Java считаются следующие символы Unicode:

  • пробел (\u0020);
  • табуляция (\u0009);
  • перевод формата (\u000C);

Символы разрыва строки также используются для форматирования текста, но они могут иметь значение и с точки зрения синтаксиса программы. Формальные правила использования разрывов строк в Java довольно сложны, но на практике достаточно помнить только то, что обычно рекомендуется начинать новый оператор с новой строки. Символами разрыва строки в Java считаются следующие символы Unicode:

  • перевод строки (\u000A);
  • возврат каретки (\u000D);
  • пара символов возврат каретки/перевод строки (считается одним разрывом строки).

5.2.2. Комментарии

Комментарии в Java могут быть однострочными и многострочными. Однострочные комментарии начинаются с символов // и продолжаются до конца текущей строки, как показано в приведенном выше примере. Многострочные комментарии заключаются в маркеры /* и */, например:

/* Это пример комментария,
   содержащего несколько строк. */

Многострочные комментарии не могут быть вложены друг в друга. Текст комментария полностью игнорируется при выполнении программы.

Java поддерживает специальную форму многострочного комментария вида /***/. Такие комментарии называются документирующими и используются для автоматического документирования библиотек классов утилитой javadoc. Мы не приводим описания этой утилиты; его можно найти в документации к JDK.

5.2.3. Зарезервированные слова

Следующие имена являются ключевыми словами языка Java и не могут употребляться в качестве идентификаторов:

abstract default if private throw
boolean do implements protected throws
break double import public transient
byte else instanceof return try
case extends int short void
catch final interface static volatile
char finally long super while
class float native switch  
const for new synchronized  
continue goto package this  

Отметим, что ключевые слова const и goto в Java не используются, но являются зарезервированными.

5.2.4. Идентификаторы

Идентификаторы используются в Java в качестве имен переменных, классов и методов. Они могут начинаться с латинской буквы, символа "$" (знак доллара) или символа "_" (подчеркивание) и должны состоять из латинских букв, цифр и символов "$" и "_". Знак доллара рекомендуется использовать только в идентификаторах программ, которые автоматически генерируются другими программами. Идентификаторы не могут совпадать с зарезервированными словами. Два идентификатора считаются равными, если они текстуально совпадают; это означает, что Java проводит различие между строчными и прописными буквами. Примеры синтаксически правильных идентификаторов:

MyIdentfier another_identifier $id _function123

5.2.5. Константы

Константы используются для задания постоянных значений. В Java имеется несколько типов констант, соответствующих его встроенным типам, а именно:

  • константа null нулевого типа;
  • логические константы true (истина) и false (ложь) типа boolean;
  • символьные константы типа char, например, 'a' или '\t';
  • строковые константы класса String, например, "Привет всем!";
  • целые константы типов int и long, например, 111 или -2L;
  • плавающие константы типов float и double, например, 3.1415926.

5.2.5.1. Символьные константы

Символьная константа — это один символ Unicode, заключенный в одинарные кавычки. Символ может быть задан собственно символом или escape-последовательностью вида \uXXXX, где XXXX — шестнадцатеричный код символа Unicode. Примеры:

'a' 'Ю' '©' '\u03A9'

Несколько символов обозначаются специальными escape-последовательностями:

\0 \u0000 нуль (NUL)
\b \u0008 забой (BS)
\t \u0009 табуляция (HT)
\n \u000A перевод строки (LF)
\f \u000C перевод формата (FF)
\r \u000D возврат каретки (CR)
\" \u0022 двойная кавычка (")
\' \u0027 одинарная кавычка (')
\\ \u005C обратная косая черта (\)

5.2.5.2. Строковые константы

Строковая константа — это нуль или более символов Unicode, заключенных в двойные кавычки. Строка, не содержащая символов (""), называется пустой строкой. Символы Unicode, входящие в состав строки, могут задаваться своим числовым кодом с помощью escape-последовательностей, как описано в предыдущем параграфе. Примеры строковых констант:

"Это строковая константа."
"Графический образ хранится в файле C:\\webstuff\\mypage\\gifs\\garden.gif."
"Эта строка заканчивается разрывом строки.\r\n"

5.2.5.3. Целые константы

Целые константы могут быть положительными, отрицательными и нулем. По системе счисления они могут быть десятичными, восьмеричными и шестнадцатеричными:

  • Десятичные числа — это просто набор десятичных цифр, например: 1234, -256.
  • Восьмеричные числа начинаются с 0 и состоят из цифр 0 — 7, например: 01234, -067.
  • Шестнадцатеричные числа начинаются с 0x или 0X и состоят из цифр 0 — 9 и букв A — F в любом регистре, например: 0xA000, 0Xa000, -0x1234.

Целые константы с суффиксом L или l имеют тип long (например, -1L или 0x12345678l); все остальные целые константы имеют тип int. Диапазон допустимых значений констант типа int: от -2147483648 (-231) до 2147483647 (231-1). Диапазон допустимых значений констант типа long: от -9223372036854775808L (-263) до 9223372036854775807L (263-1).

5.2.5.4. Плавающие константы

Плавающие константы отличаются от целых наличием или десятичной точки, или буквы e в любом регистре, задающей степень десяти в научной нотации, или того и другого. Примеры плавающих чисел:

0.0001, .0001, 1e-4, 1.0E-4 // Четыре плавающих числа, равных друг другу
-1.23e2 // Плавающее число, равное -123

Плавающие константы с суффиксом F или f имеют тип float (например, -1.0F или -123.45678f); все остальные плавающие константы имеют тип double (для подчеркивания этого они могут иметь необязательный суффикс D или d). Тип float соответствует 32-битовому формату IEEE 754, а тип double — 64-битовому формату IEEE 754. Наибольшим возможным значением числа типа float является 3.40282347e+38f, а наименьшим возможным положительным значением 1.40239846e-45f. Наибольшим возможным значением числа типа double является 1.79769313486231570e+308, а наименьшим возможным положительным значением 4.94065645841246544e-324.