Метод — это действие или последовательность действий. Все действия записываются в методах. В предыдущих уроках синтаксис (структура написания) методов был скрыт для простоты. Например, код
System.out.println("Welcome!");
приводился к такому виду:
public static void main(String[] args) {
System.out.println("Welcome!");
}
Что означает public, static и void — разберём позже. main — это имя метода. Файл можно запустить на выполнение (открыть как программу), только если существует метод main (он в данном контексте называется точкой входа, т. к. с него начинается выполнение). В скобках перечислены параметры — это информация, которую метод принимает и обрабатывает.
В файле, который можно запустить на выполнение, метод main должен иметь единственный параметр (принимать единственный аргумент) — массив строк String[] args. Что такое аргументы и массив и откуда они попадают в программу — пока упустим из виду.
Программист может объявлять собственные методы. Например, объявим метод sayWelcome:
public static void sayWelcome() {
System.out.println("Welcome!");
}
Объявить метод обозначает описать, какие данные метод принимает, что делает с ними и что возвращает. Пустые скобки означают, что метод не принимает аргументов, т. е. для работы ему не нужна никакая дополнительная информация. Теперь методом можно воспользоваться — это называется «вызвать метод» и записывается так:
sayWelcome();
sayWelcome — имя вызываемого метода, пустые круглые скобки — список передаваемых аргументов (пустой в данном случае).
Теперь можно переписать программу таким образом:
public static void main(String[] args) {
sayWelcome();
}
public static void sayWelcome() {
System.out.println("Welcome!");
}
Когда файл будет запущен на выполнение, выполнится метод main. Он состоит из одной команды — вызова метода sayWelcome.Следовательно, будет вызван метод sayWelcome, который, в свою очередь, выведет строку «Welcome!» на экран. Схематически можно представить это так:
Можно вызывать метод любое количество раз, например, программа
public static void main(String[] args) {
sayWelcome();
sayWelcome();
sayWelcome();
}
public static void sayWelcome () {
System.out.println("Welcome!");
}
выведет на экран
Welcome! Welcome! Welcome!
Схематически выполнение можно представить так:
Программа, трижды выводящая на экран «Welcome!», могла бы выглядеть и так:
public static void main(String[] args) {
sayWelcomeThreeTimes();
}
public static void sayWelcomeThreeTimes () {
System.out.println("Welcome!");
System.out.println("Welcome!");
System.out.println("Welcome!");
}
но выполнение программы происходило бы таким образом
Передача строки-аргумента
Методы были бы довольно бесполезными, если бы не могли принимать информацию.
public static void say(String str) {
System.out.println(str);
}
Этот метод принимает единственный аргумент — String str. Так же, как и с обычными локальными переменными, String — это тип аргумента (строка), str — имя локальной переменной, в которой находится значение этого аргумента. Переменная str существует только в пределах тела этого метода. Этот код:
public static void main() {
sayTwice("Hello!");
}
public static void sayTwice (String str) {
System.out.println(str);
System.out.println(str);
}
выведет на экран
Hello! Hello!
Схематично:
А, например, такой код:
public static void main() {
sayTwice("Hello!");
sayTwice("Goodbye.");
}
public static void sayTwice (String str) {
System.out.println(str);
System.out.println(str);
}
выведет
Hello! Hello! Goodbye. Goodbye.
Передача целого числа
Разумеется, методы могут принимать числа.
public static void main(String[] args) {
sayHowManyPotatoes(34);
}
public static void sayHowManyPotatoes(int count) {
System.out.println("There are " +
count " potatoes.");
}
Выводит на экран:
There are 34 potatoes.
Метод sayHowManyPotatoes принимает целое число и выводит строку, сложенную со значением аргумента (переменной count). Схематически можно представить это так:
Передача двух аргументов
public static void main(String[] args) {
sayHowMany("potatoes", 34);
sayHowMany("tomatoes", 19);
}
public static void sayHowMany(String what,
int count) {
// первый вызов: what = potatoes, count = 34
// второй вызов: what = tomatoes, count = 19
System.out.println("There are " +
count + " " + what + ".");
}
выведет на экран:
There are 34 potatoes. There are 19 tomatoes.
Схематически:
Пример с числом и арифметикой
public static void main(String[] args) {
saySquareOf(2);
saySquareOf(9);
saySquareOf(11);
}
public static void saySquareOf (int n) {
System.out.println(n * n);
}
Вывод:
4 81 121
Схематически:
По аналогии можно писать методы, которые принимают любые количества аргументов любых типов.