Menu

Синтаксис Java: классы, методы, инструкции и фигурные скобки

Форма программы на Java — метод main, инструкции и точки с запятой, блоки и фигурные скобки, а также правила, которые компилятор требует ещё до того, как ваш код запустится.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Как выглядит программа на Java

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

Вот наименьшая возможная полная программа на Java. Запустите её:

Это немало слов, чтобы напечатать одну строку, и, в отличие от Python или JavaScript, ни одно из них пропустить нельзя. Каждая часть обязательна, поэтому стоит понять, что делает каждая из них. Мы разберём её снаружи внутрь.

Всё живёт внутри класса

В Java нет «свободного» кода, плавающего на верхнем уровне файла. Весь код живёт внутри класса, объявленного ключевым словом class и именем:

public class Main {
    // everything goes in here
}

Открывающая { и соответствующая ей закрывающая } обозначают тело класса. Имя Main выбираете вы сами, но с одним важным правилом: в обычном файле .java класс public должен в точности совпадать с именем файла. public class Main принадлежит файлу Main.java. Ошибитесь в регистре — и компилятор откажется его собирать.

Что такое классы на самом деле, вы узнаете в главе «Классы». Пока же воспринимайте public class Main { ... } как обязательную обёртку вокруг вашего кода.

Метод main — это стартовая черта

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

public static void main(String[] args) {
    // your code starts here
}

Эта сигнатура не обсуждается. Каждое слово выполняет свою задачу:

  • public — среда выполнения может обратиться к нему извне класса.
  • static — он запускается без предварительного создания объекта класса.
  • void — он ничего не возвращает по завершении.
  • main — точное имя, которое ищет среда выполнения.
  • String[] args — массив всех аргументов командной строки, переданных программе.

Если ошибочно хотя бы одно слово — Static вместо static, String args вместо String[] args — ваш код, возможно, всё равно скомпилируется, но запуск завершится ошибкой Error: Main method not found in class Main. Это сообщение почти всегда означает опечатку в этой строке.

Инструкции заканчиваются точкой с запятой

Инструкция — это одна законченная команда. В Java каждая инструкция заканчивается точкой с запятой ;. Компилятор использует точку с запятой, чтобы понять, где заканчивается одна команда и начинается следующая, — переводы строк для него не важны.

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

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

Забудьте точку с запятой — и компилятор остановит вас ещё до запуска программы:

int score = 90
System.out.println(score);
error: ';' expected
        int score = 90
                      ^

Пропущенная точка с запятой — самая частая ошибка компиляции, с которой вы столкнётесь как новичок. Когда компилятор указывает на строку, проверьте и строку выше — именно там часто и кроется настоящий пропуск.

Блоки и скобки

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

Обратите внимание на отличие от инструкций: строка, открывающая блок, заканчивается на {, а не на точку с запятой, и после закрывающей } метода, класса, if или цикла точку с запятой ставить не нужно. Путать это — классическая ранняя ошибка:

public static void main(String[] args) {
    System.out.println("hi");
}; // <- this semicolon is unnecessary (and after a class/method, wrong)

Отступы в примерах нужны исключительно людям. Java их игнорирует, но единообразные отступы — это то, как вы и все остальные отслеживаете, какая { соответствует какой }. Доверьте редактору автоотступы — и скобки выровняются за вас.

Java чувствителен к регистру

Java трактует прописные и строчные буквы как совершенно разные вещи. score, Score и SCORE — три отдельных имени. То же касается ключевых слов и встроенных имён:

Если бы вы написали system.out.println (строчная s) или String Name, а затем попытались использовать name, компилятор отверг бы это. Несколько имён, в регистре которых новички часто ошибаются:

  • System — заглавная S. system.out.println(...) не скомпилируется.
  • String — заглавная S. Это класс, в отличие от примитивных типов со строчной буквы.
  • void, int, public, static — все строчные. Это ключевые слова.

Большинство ошибок «cannot find symbol» восходит к промаху в регистре. Сама ошибка даже сообщает, какой символ она не смогла найти, — сверьте его регистр с тем, что вы напечатали.

Собираем всё вместе

Вот чуть более крупная программа, использующая всё с этой страницы — класс, метод main, несколько инструкций, вложенный блок и единообразный регистр:

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

Далее: Комментарии

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

Часто задаваемые вопросы

Каков базовый синтаксис программы на Java?

Любая программа на Java живёт внутри класса, а выполнение начинается в методе с точной сигнатурой public static void main(String[] args). Инструкции заканчиваются точкой с запятой, а блоки кода группируются фигурными скобками { }. Минимальная программа выглядит так: public class Main { public static void main(String[] args) { System.out.println("Hi"); } }.

Зачем Java нужен public static void main(String[] args)?

Это в точности та точка входа, которую ищет среда выполнения Java. public позволяет среде вызвать его извне, static означает, что он запускается без предварительного создания объекта, void означает, что он ничего не возвращает, а String[] args принимает аргументы командной строки. Измените хоть одно слово — даже регистр — и программа скомпилируется, но не запустится, выдав Error: Main method not found.

Всем ли инструкциям в Java нужна точка с запятой?

Каждая инструкция заканчивается точкой с запятой: объявления переменных, присваивания, вызовы методов. Но строки, заканчивающиеся блоком (if, for, while, заголовок класса или метода), вместо этого заканчиваются на {, и после закрывающей } этих блоков точку с запятой не ставят. Забытая точка с запятой — самая частая ошибка компиляции у новичков в Java.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ