Бесплатный курс по java. Зарегистрируйтесь для отслеживания прогресса →

Java: Создание (определение) метода

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

Вот простейший пример метода, который печатает в консоль '"Hello world!"' (напомним, это побочный эффект):

static void sayHello() {
  System.out.println("Hello world!"); // => Hello world!
}

Первая строка описания метода называется заголовком. Заголовок обычно состоит из:

  • модификаторов
  • типа возвращаемого значения
  • названия метода
  • параметров (аргументов) метода.

Задача метода - выполнить действия, указанные в { }.

Модификаторы определяют, как метод можно вызвать в программе. static означает, что метод не пользуется членами того класса, к которому относится (напомним, в Java всякий метод относится к какому-то классу, но классы мы в этом курсе не изучаем).

Также в описании метода можно указать модификаторы доступа. Например, модификатор public означает, что метод можно вызвать в любой части программы.

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

В примере выше метод просто печатает в консоль и ничего не должен возвращать, поэтому тип возвращаемого значения — void.

Если для работы метода нужны исходные данные (например, числа или текст), то в описании метода их перечисляют в круглых скобках (). В примере выше параметры не нужны, поэтому скобки оставили пустыми.

Чтобы Java-приложение могло работать, в каком-то его классе обязательно нужно объявить метод main(), как мы делали ранее во всех примерах:

public static void main(String[] args) {

}

Именно этот метод и будет вызван при запуске приложения, поэтому в нём мы и писали код, который хотели выполнить. В примерах мы объявляли этот метод в классе App.

Создадим наш первый метод. У него будет одна задача: выводить на экран текст Today is: December 5.

Нужно назвать метод так, чтобы из названия была понятна его задача. Давайте дадим ему имя showDate():

static void showDate() {
  var text = "Today is: December 5";
  System.out.println(text); // => Today is: December 5
}

В нашем методе только две строчки кода, но их может быть сколько угодно. Методы можно считать программами внутри программ.

Вот полная программа, c определением метода и его вызовом:

public class App {
  public static void main(String[] args) {
    App.showDate();
  }

  static void showDate() {
    var text = "Today is: December 5";
    System.out.println(text);
  }
}

В ней не только метод main(), но и showDate() описан в классе App, поэтому метод showDate() вызывается выражением App.showDate(). Но на самом деле, если оба метода описаны в одном и том же классе, как здесь, то один из них может вызывать другой без указания имени класса: не App.showDate(), а просто showDate().

Today is: December 5

Мы могли бы использовать подобный метод на сайте или в какой-нибудь программе, чтобы выводить текущую дату на экран. Но в текущем виде метод не справится с задачей, ведь он всегда выводит Today is: December 5.

Давайте улучшим метод так, чтобы он принимал дату в качестве аргумента и выводил её на экран.

Определим и вызовем наш обновленный метод:

public static void main(String[] args) {
  showDate("January 29");
}

static void showDate(String date) {
  var text = "Today is: " + date;
  System.out.println(text);
}
Today is: January 29

Теперь понятно, зачем нужны были круглые скобки после имени метода: в них можно указать аргументы. Теперь наш метод принимает один аргумент — date, имеющий тип String (так называется в Java тип, соответствующий строке текста).

Заметьте: мы не создаём переменную date, но используем её в теле метода. Java работает так: переменная сама создаётся при вызове и указанное значение (в нашем примере — "January 29") записывается в эту переменную.

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

Аргументы можно называть как угодно, их имена имеют смысл исключительно в теле метода.


Полный пример определения метода с несколькими аргументами и её вызова:

public static void main(String[] args) {
  showDate("January", "29");
}

static void showDate(String month, String day) {
  var text = "Today is: " + month + " " + day;
  System.out.println(text);
}
Today is: January 29

Главное — помнить про порядок: в каком порядке аргументы стоят при определении метода, в таком же порядке они должны передаваться при вызове.

Задание

Реализуйте метод printMotto(), который печатает на экран фразу Winter is coming.
java
printMotto(); // => Winter is coming

Чтобы мы могли вызвать этот метод из другого класса, нужно его пометить не только ключевым словом static, но еще и public.

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


Советы


Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе