Если переменные и константы хранят некоторые значения, то методы содержат собой набор операторов, которые выполняют определенные действия.
Общее определение методов выглядит следующим образом:
1 2 3 |
[модификаторы] тип_возвращаемого_значения название_метода ([параметры]){ // тело метода } |
Модификаторы и параметры необязательны.
По умолчанию главный класс любой программы на Java содержит метод main, который служит точкой входа в программу:
1 2 3 |
public static void main(String[] args) { System.out.println("привет мир!"); } |
Ключевые слова public
и static
являются модификаторами. Далее идет тип возвращаемого значения. Ключевое слово void
указывает на то, что метод ничего не возвращает.
Затем идут название метода — main и в скобках параметры метода — String[] args
. И в фигурные скобки заключено тело метода — все действия, которые он выполняет.
Создадим еще пару процедур:
1 2 3 4 5 6 7 8 9 |
// определение первого метода static void method1(){ System.out.println("Method1"); } //определение третьего метода void method2(){ System.out.println("Method2"); } |
Условно методы, которые не возвращают никакого значения, называются процедурами.
Кроме void
методы в Java могут возвращать конкретное значение. Такие методы, также условно называют функциями. Например:
1 2 3 4 5 6 7 |
int factorial(){ return 1; } String hello(){ return "Hell to World"; } |
В функции в качестве типа возвращаемого значения вместо void
используется любой другой тип. В данном случае тип int
и тип String
. Функции также отличаются тем, что мы обязательно должны использовать оператор return, после которого ставится возвращаемое значение.
При этом возвращаемое значение всегда должно иметь тот же тип, что значится в определении функции. И если функция возвращает значение типа int
, то после оператора return стоит целочисленное значение (как в данном случае число 1), которое неявно является объектом типа int
.
Использование методов в программе
После определения методов их можно использовать в программе. Для вызова метода надо указать его имя, а после него в скобках значения для его параметров:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public static void main(String[] args) { String mes = getMessage(); // вызов первого метода System.out.println(mes); getSum(); // вызов второго метода } static String getMessage(){ return "Hell to World"; } static void getSum(){ int x = 2; int y = 3; System.out.printf("%d + %d = %d \n", x, y, x+y); } |
Здесь определены два метода. Первый метод getMessage возвращает значение типа String
. Поэтому мы можем присвоить это значение какой-нибудь переменной типа String: String mes = getMessage()
Второй метод — процедура Sum — просто складывает два числа и выводит результат на консоль.
Передача параметров в методы
Методы могут принимать произвольное число параметров. Например:
1 2 3 4 |
static int getSum(int x, int y){ return x+y; } |
А при вызове этого метода в программе нам необходимо передать на место параметров значения или переменные, которые соответствуют типу параметра:
1 2 3 4 5 |
public static void main(String[] args) { int result = getSum(4,6); System.out.println(result); } |
Перегрузка методов
В программе мы можем использовать методы с одним и тем же именем, но с разными типами и/или количеством параметров. Такой механизм называется перегрузкой методов.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public static void main(String[] args) { int n1 = getSum(20,10); System.out.println(n1); double n2 = getSum(20.3, 30.4, 9.8); System.out.println(n2); } static int getSum(int x, int y){ return x+y; } static double getSum(double x, double y, double z){ return x+y+z; } |
Здесь у нас есть два варианта метода getSum()
, но при его вызове в зависимости от типа и количества передаваемых параметров система выберет именно ту версию, которая наиболее подходит.
Параметры переменной длины
Метод может принимать параметры переменной длины одного типа. Например, нам надо передать в метод массив и вычислить сумму чисел этого массива:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public static void main(String[] args) { int n1 = getSum(20,10); System.out.println(n1); // 30 int n2 = getSum(20, 34, 9, 5); System.out.println(n2); // 68 int n3 = getSum(); System.out.println(n3); // 0 } static int getSum(int ...nums){ int result =0; for(int x:nums) result+=x; return result; } |
Троеточие перед названием параметра int ...nums
указывает на то, что он будет необязательным и будет представлять массив. Мы можем передать в метод getSum одно число, несколько чисел, а можем вообще не передавать никаких параметров. Причем, если мы хотим передать несколько параметров, то необязательный параметр должен указываться в конце:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public static void main(String[] args) { int n1 = getSum("Welcome!", 20,10); System.out.println(n1); // 30 int n3 = getSum("Hello World!"); System.out.println(n3); // 0 } static int getSum(String message, int ...nums){ System.out.println(message); int result =0; for(int x:nums) result+=x; return result; } |