Menu

Методы в Java: как объявлять и вызывать методы

Что такое метод в Java, как его объявить и вызвать, возвращаемые значения и void, статический метод main и как методы помогают держать код организованным и переиспользуемым.

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

Зачем нужны методы

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

Вы уже вызывали методы: System.out.println(...) — это вызов метода, и list.size() тоже. Теперь вы напишете свои собственные.

Объявление и вызов метода

Объявление метода состоит из четырёх частей: типа возвращаемого значения, имени, пары скобок (для параметров) и тела в фигурных скобках. Вот самый маленький полезный пример — метод, который выполняет какую-то работу и ничего не возвращает:

Разберём части static void printGreeting():

  • static — позволяет main вызывать его напрямую, не создавая объект (подробнее об этом ниже).
  • void — этот метод не возвращает никакого значения.
  • printGreeting — имя, по которому вы его вызываете.
  • () — пустые скобки означают, что он не принимает входных данных.

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

Возврат значения

Большинство методов что-то вычисляют и возвращают это с помощью return. Тип возвращаемого значения перед именем указывает, какого рода значение выходит наружу; здесь — int:

square(5) вычисляется в 25, которое вы можете сохранить в переменной, напечатать или использовать в более крупном выражении: вызов метода замещает собой возвращаемое им значение. В тот момент, когда выполняется return, метод завершается и управление возвращается к вызывающему коду. Любой код после return на том же пути никогда не выполняется.

Тип возвращаемого значения и возвращаемое значение должны совпадать. Объявить int и попытаться return "text"; — это ошибка компиляции: компилятор обеспечивает соблюдение контракта.

void против типа возвращаемого значения

Различие простое: используйте настоящий тип возвращаемого значения, когда вызывающему коду нужно получить значение, и void, когда метод просто что-то делает (печатает, сохраняет, обновляет состояние).

void logMessage(String msg)   // выполняет работу, ничего не возвращает
int  add(int a, int b)        // вычисляет значение, которое использует вызывающий код

Частая ошибка новичков — попытка использовать «результат» метода void:

int x = printGreeting();   // ошибка компиляции: printGreeting() возвращает void

Присваивать нечего, поэтому это не скомпилируется. Если вы ловите себя на желании получить результат метода void, это признак того, что ему стоило бы что-то возвращать.

Методы с ветвлением и ранним возвратом

Вы можете использовать return более чем в одном месте. Ранний возврат — как только вы знаете ответ — часто читается яснее, чем вложение всего в else:

Поскольку каждый return выходит немедленно, побеждает первое подходящее условие. Просто убедитесь, что каждый путь через метод, возвращающий значение, заканчивается return: если какая-то ветка может «провалиться» без возврата, компилятор пожалуется на «missing return statement». Завершающий return "F"; здесь покрывает случай прохода до конца.

Что здесь означает static

Возможно, вы заметили, что каждый метод выше — static. Метод static принадлежит самому классу, а не какому-либо объекту, поэтому main (который тоже static) может вызывать его напрямую по имени. Без static метод принадлежит экземпляру, и вам понадобился бы объект, чтобы вызвать его на нём.

Пока вы пишете небольшие программы, логика которых живёт рядом с main, помечайте свои вспомогательные методы как static, чтобы их можно было вызывать таким же образом. Когда вы начнёте создавать собственные классы и объекты, вы будете писать и нестатические методы (методы экземпляра): это придёт с главой о классах.

Локальные переменные остаются внутри метода

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

total и i целиком живут внутри sumTo. Единственное, что покидает метод, — это значение, которое вы возвращаете через return. Такая изоляция — это преимущество: каждый метод представляет собой самодостаточную единицу, о которой можно рассуждать, не беспокоясь, что его временные переменные утекут наружу или столкнутся с именами в другом месте.

Далее: параметры методов

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

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

Что такое метод в Java?

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

Как создать и вызвать метод в Java?

Объявите его с типом возвращаемого значения, именем и скобками: static int square(int n) { return n * n; }. Затем вызовите по имени, передав аргументы в скобках: int result = square(5);. Метод, который ничего не возвращает, использует void и вызывается как самостоятельная инструкция, например printGreeting();.

Что означает void в методе Java?

void означает, что метод не возвращает никакого значения: он выполняет свою работу (например, печатает) и ничего не передаёт вызывающему коду. Результат метода void нельзя присвоить переменной. Если метод должен выдавать значение, которое использует вызывающий код, задайте ему настоящий тип возвращаемого значения, например int или String, и используйте return.

Coddy programming languages illustration

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

НАЧАТЬ