Определение собственных методов значительно упрощает написание и поддержку программ. Например, методы позволяют объединять составные операции в одну.
К примеру, отправка письма на сайте — это достаточно сложный процесс, включающий в себя взаимодействие с интернетом. Можно определить метод и скрыть всю сложность за одной простой конструкцией:
// Место, откуда берется метод
import com.example.Mailer;
var email = "support@hexlet.io";
var title = "Помогите";
var body = "Я написал историю успеха, как я могу получить скидку?";
// Mailer – имя класса, в котором определен метод send()
// Один маленький вызов — и много логики внутри
Mailer.send(email, title, body);
Внутри себя подобный вызов выполняет довольно много логики. Он соединяется с почтовым сервером, формирует правильный запрос на основе заголовка и тела сообщения, а затем все это отправляет, не забыв закрыть соединение.
Как создавать методы
Для начала рассмотрим структуру методов. Обычно они устроены так:
Создадим наш первый метод. Его задача — вывести на экран текущую дату:
Today is: 2021-10-25
import java.time.LocalDate;
// Определение метода
// Определение не вызывает и не выполняет метод
// Мы лишь говорим, что теперь такой метод существует
public class App {
public static void showCurrentDate() {
// Встроенный метод в Java для получения текущего времени и даты
var currentDate = LocalDate.now();
var text = "Today is: " + currentDate;
System.out.println(text);
}
}
// Вызов метода
// Обязательно указывать имя класса
App.showCurrentDate(); // => Today is: 2021-10-25
Определение метода в Java включает в себя много действий, которые мы постепенно разберем.
Их можно разделить на две группы:
- То, что влияет на работу самого метода
- То, как этот метод видим за пределами класса
За видимость отвечает слово public. Оно дает возможность вызывать методы снаружи класса, как в примере выше. Кроме него существует private, который разбирается на Хекслете в курсе по ООП в Java.
За работу метода отвечают:
static — говорит о том, что метод статический. Это значит, что он принадлежит самому классу. Благодаря этому мы можем вызвать метод, используя имя класса, без необходимости создавать объект этого класса
void используется, если метод ничего не возвращает. Например, такое определение у метода
System.out.println()
. Если метод возвращает какие-то данные, то вместо void указывается тип возвращаемых данных
В отличие от обычных данных, методы выполняют действия, поэтому их имена практически всегда должны быть глаголами: «построить что-то», «нарисовать что-то», «открыть что-то».
Все, что описывается внутри фигурных скобок {}
, называется телом метода. Внутри тела можно описывать любой код. Считайте, что это маленькая самостоятельная программа, набор произвольных инструкций.
Тело выполняется ровно в тот момент, когда запускается метод. Причем каждый вызов метода запускает тело независимо от других вызовов. Кстати, тело может быть пустым:
// Минимальное определение метода
public class App {
public static void noop() {
// Тут мог бы быть код, но его нет
// Обратите внимание на отступы
// Для читаемости, любой код внутри тела сдвигается вправо на 4 пробела
}
}
App.noop();
Понятие «создать метод» имеет много синонимов: «реализовать», «определить» и даже «заимплементить». Все эти термины встречаются в повседневной практике на работе.