W3docs

Синтаксис Java

Основы синтаксиса Java: операторы, блоки кода, идентификаторы, ключевые слова, чувствительность к регистру и структура исходного файла.

Синтаксис Java определяет форму файла .java: где заканчиваются операторы, как группируются блоки кода, какие слова имеют особое значение для компилятора и какие символы допустимы в именах. Эти правила проверяются во время компиляцииjavac откажется создать файл .class, пока все они не будут соблюдены, — поэтому понимание их с самого начала убережёт вас от множества непонятных ошибок.

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

Полный исходный файл Java

Каждая самостоятельная программа на Java требует как минимум одного класса с методом main. Вот минимально необходимый файл:

public class App {
    public static void main(String[] args) {
        System.out.println("Hello, syntax!");
    }
}

На странице происходят три вещи:

  • Объявление класса public class App { ... } оборачивает всё содержимое в класс.
  • Объявление метода public static void main(String[] args) { ... } является точкой входа в программу.
  • Оператор System.out.println(...) выполняет работу.

Файл должен быть сохранён как App.java, потому что публичный класс называется App. Это жёсткое правило: исходный файл может содержать не более одного класса public, и имя файла должно точно совпадать с именем этого класса, включая регистр. Полный цикл компиляции и запуска описан в разделе Java Hello World.

Операторы заканчиваются точкой с запятой

Оператор Java — это инструкция, которая говорит программе что-то сделать. Каждый оператор заканчивается точкой с запятой:

int score = 0;
score = score + 5;
System.out.println(score);

Поскольку оператор заканчивается точкой с запятой, а не переносом строки, длинный оператор можно разбить на несколько строк, или (менее читаемо) разместить несколько операторов в одной строке:

int total = 1 + 2 + 3
          + 4 + 5;        // one statement, two lines
int a = 1; int b = 2;     // two statements, one line

Пропуск точки с запятой — наиболее распространённая ошибка новичков. Компилятор укажет на строку, в которой он обнаружил проблему, а это обычно строка после той, в которой точка с запятой действительно отсутствует. Поэтому, когда вы видите сообщение «';' expected», проверьте строку выше отмеченной.

Блоки группируют операторы

Фигурные скобки { и } группируют операторы в блок. Тела классов, методов, циклов и операторов if — всё это блоки:

public class Counter {        // class block opens
    public static void main(String[] args) {   // method block opens
        for (int i = 0; i < 3; i++) {          // loop block opens
            System.out.println(i);
        }                                       // loop block closes
    }                                           // method block closes
}                                               // class block closes

Отступы не являются частью синтаксиса (компилятор игнорирует пробельные символы), но каждый читающий код ожидает четыре пробела на каждый уровень вложенности. Большинство IDE форматируют это за вас при сохранении.

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

Идентификатор — это любое имя, которое вы выбираете: для класса, метода, переменной или константы. Правила:

  • Начинается с буквы, _ или $.
  • После первого символа могут также использоваться цифры.
  • Чувствителен к регистру: total и Total — разные имена.
  • Не может быть зарезервированным ключевым словом (class, int, return и т.д.).
  • Нет ограничения на длину.

Допустимые: total, lineCount, _temp, $jquery, userName2. Недопустимые: 2lines (начинается с цифры), line-count (дефис), class (ключевое слово).

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

  • Классы используют UpperCamelCaseBankAccount, HttpServer.
  • Методы и переменные используют lowerCamelCaseaccountBalance, parseInput.
  • Константы используют UPPER_SNAKE_CASEMAX_SIZE.

На практике их соблюдение не является опциональным. Глава Переменные Java подробнее рассматривает именование и объявление данных.

Ключевые слова

Java резервирует около 50 слов для нужд самого языка. Вы не можете использовать их в качестве идентификаторов. Наиболее часто встречающиеся из них:

abstract  case      do        finally    int         private     synchronized  throws
assert    catch     double    float      interface   protected   this          transient
boolean   char      else      for        long        public      throw         try
break     class     enum      if         new         return      void          while
byte      continue  extends   import     null        short       volatile      switch

Плюс несколько контекстных ключевых слов, добавленных в современных версиях Java, которые имеют особое значение только в определённых позициях (var, yield, record, sealed, permits).

Чувствительность к регистру

Java чувствительна к регистру повсюду — в именах классов, методов, переменных и ключевых словах. System — это не то же самое, что system, а if — не то же самое, что If. Компилятор сообщит «cannot find symbol», если вы неправильно напишете имя.

Пробельные символы и переносы строк

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

int x=1+2;

или:

int x = 1 + 2;

Используйте то, что более читаемо; стандартный стиль оформления (и форматтер вашей IDE) подскажет правильный ответ.

Единственное место, где пробельные символы имеют значение, — внутри строковых и символьных литералов: "Hello world" и "Helloworld" — разные значения, и пробелы внутри них сохраняются ровно так, как вы их напечатали.

Комментарии

Комментарий — это текст, который компилятор полностью игнорирует. В Java есть три формы:

// line comment — runs to the end of the line

/* block comment —
   can span multiple lines */

/**
 * Javadoc comment — a block comment whose first character
 * is an extra asterisk. Tools generate API docs from these.
 */

Используйте комментарии, чтобы объяснить почему что-то делается, а не пересказывать что очевидно делает код. Глава Комментарии Java рассматривает каждую форму и случаи её применения.

Внимание

Блочные комментарии не могут быть вложенными. Запись /* outer /* inner */ */ завершает комментарий на первом */, а оставшийся */ становится синтаксической ошибкой. Чтобы закомментировать фрагмент, уже содержащий /* ... */, используйте строчные комментарии (//).

Программа, демонстрирующая правила

java— editable, runs on the server

Обратите внимание: каждый оператор заканчивается ;, тела класса и метода являются блоками { ... }, имена x, y и product — допустимые идентификаторы, а файл был бы сохранён как Demo.java.

Что дальше

В следующей главе, Вывод Java, рассматриваются три метода печати (print, println, printf), которые вы будете использовать для просмотра результатов работы ваших программ. Затем глава Типы данных Java объясняет, какие виды значений могут хранить ваши идентификаторы.

Практика

Практика
Какое утверждение о синтаксисе Java верно?
Какое утверждение о синтаксисе Java верно?
Was this page helpful?