Синтаксис 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-разработчик ожидает их соблюдения:
- Классы используют
UpperCamelCase—BankAccount,HttpServer. - Методы и переменные используют
lowerCamelCase—accountBalance,parseInput. - Константы используют
UPPER_SNAKE_CASE—MAX_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 */ */ завершает комментарий на первом */, а оставшийся */ становится синтаксической ошибкой. Чтобы закомментировать фрагмент, уже содержащий /* ... */, используйте строчные комментарии (//).
Программа, демонстрирующая правила
Обратите внимание: каждый оператор заканчивается ;, тела класса и метода являются блоками { ... }, имена x, y и product — допустимые идентификаторы, а файл был бы сохранён как Demo.java.
Что дальше
В следующей главе, Вывод Java, рассматриваются три метода печати (print, println, printf), которые вы будете использовать для просмотра результатов работы ваших программ. Затем глава Типы данных Java объясняет, какие виды значений могут хранить ваши идентификаторы.