GrabDuck

Методы | Java

:

Последнее обновление: 30.11.2015

Если переменные и константы хранят некоторые значения, то методы содержат собой набор операторов, которые выполняют определенные действия.

Общее определение методов выглядит следующим образом:

[модификаторы] тип_возвращаемого_значения название_метода ([параметры]){
	// тело метода
}

Модификаторы и параметры необязательны.

По умолчанию главный класс любой программы на Java содержит метод main, который служит точкой входа в программу:

public static void main(String[] args) {
	System.out.println("привет мир!");
}

Ключевые слова public и static являются модификаторами. Далее идет тип возвращаемого значения. Ключевое слово void указывает на то, что метод ничего не возвращает.

Затем идут название метода - main и в скобках параметры метода - String[] args. И в фигурные скобки заключено тело метода - все действия, которые он выполняет.

Создадим еще пару процедур:

      
// определение первого метода
static void method1(){
    System.out.println("Method1");
}

//определение третьего метода
void method2(){
    System.out.println("Method2");
}

Условно методы, которые не возвращают никакого значения, называются процедурами.

Кроме void методы в Java могут возвращать конкретное значение. Такие методы, также условно называют функциями. Например:

int factorial(){
    return 1;
}

String hello(){
    return "Hell to World";
}

В функции в качестве типа возвращаемого значения вместо void используется любой другой тип. В данном случае тип int и тип String. Функции также отличаются тем, что мы обязательно должны использовать оператор return, после которого ставится возвращаемое значение.

При этом возвращаемое значение всегда должно иметь тот же тип, что значится в определении функции. И если функция возвращает значение типа int, то после оператора return стоит целочисленное значение (как в данном случае число 1), которое неявно является объектом типа int.

Использование методов в программе

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

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 - просто складывает два числа и выводит результат на консоль.

Передача параметров в методы

Методы могут принимать произвольное число параметров. Например:

static int getSum(int x, int y){
        
    return x+y;
}

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

public static void main(String[] args) {

    int result = getSum(4,6);
    System.out.println(result);
} 

Перегрузка методов

В программе мы можем использовать методы с одним и тем же именем, но с разными типами и/или количеством параметров. Такой механизм называется перегрузкой методов. Например:

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(), но при его вызове в зависимости от типа и количества передаваемых параметров система выберет именно ту версию, которая наиболее подходит.

Параметры переменной длины

Метод может принимать параметры переменной длины одного типа. Например, нам надо передать в метод массив и вычислить сумму чисел этого массива:

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 одно число, несколько чисел, а можем вообще не передавать никаких параметров. Причем, если мы хотим передать несколько параметров, то необязательный параметр должен указываться в конце:

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;
}