Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Модуль 3. Урок 2. Аргументы и результаты работы методов. Рефакторинг. Введение в Java

Видео может быть заблокировано из-за расширений браузера. В статье вы найдете решение этой проблемы.

Из чего состоит метод — было рассказано в предыдущем уроке. Углубимся в некоторые детали.

Аргументы методов

Часто аргументы называют параметрами метода.

Аргументы метода — это те данные, с которыми метод будет работать. Они могут быть любого типа.

Уверен, Вы подметите, что метод может работать и с полями класса. Но поля класса видны всем остальным членам класса, а аргументы текущего метода видны только в рамках тела этого метода.

Рассмотрим на таком примере:

public class Foo {
    String message = "Сообщение из поля класса.";

    void printExternalMessage(String message) {
        System.out.println(message);
        System.out.println(this.message);
    }

    void printInternalMessage() {
        System.out.println(message);
    }

    public static void main(String[] args) {
        Foo example = new Foo();
        example.printExternalMessage("Сообщение, которое передали в метод как аргумент.");
        example.printInternalMessage();
    }
}

В данном примере, метод printExternalMessage видит обе ссылки с именем message: поле класса и собственный аргумент. Ввиду коллизии имен приходиться использовать ключевое слово this, чтобы явно указать ссылку, к которой обращаемся в коде.

Метод printInternalMessage видит ссылку с именем message только как поле класса Foo. Но ничего не знает о ссылке с именем message, которая находится внутри метода printExternalMessage. Как и о любых других локальных ссылках, которые могут быть объявлены в методе printExternalMessage.

Сколько у метода может быть аргументов?

Аргументов у метода может быть разное количество. Минимально — ноль. Такой метод ничего не принимает на вход. Обычно аргументы метода перечисляются через запятую: void methodName(Type1 arg1, Type2 arg2, int a, int b). Особенно если они разных типов.

У метода может быть переменное число аргументов. То есть, когда один и тот же метод может принимать то один, то два, то десять аргументов. Но эти аргументы должны быть строго одного типа! Обозначается это так: void methodName(Type1... argsName). Благодаря этому можно создать, например, метод sum который суммирует любое количество чисел (в пределах возможностей компьютера и типа int):

public static int sum(int... numbers) {
    int result = 0;
    for (int number : numbers) { // Этот код пройдется по всем числам и сложит их
        result = result + number;
    }
    return result;
}

Под капотом java превратит int... numbers в массив. С массивами Вы познакомитесь в четвертом модуле. Запоминайте эти базовые "пазлы" синтаксиса java. Постепенно они проявят общую картину.

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

Перегрузка методов — это объявление нескольких методов в одном классе с идентичными именами. Различия состоят только в количестве и/или типе аргументов в этих методах. Например:

public class Foo {
    void printSomething() {
        System.out.println("Сообщение из метода без аргументов.");
    }

    void printSomething(int number) {
        System.out.println(number);
    }

    void printSomething(String message) {
        System.out.println(message);
    }

    void printSomething(String message, int number) {
        System.out.println(message + number);
    }

    public static void main(String[] args) {
        Foo example = new Foo();
        example.printSomething();
        example.printSomething(9999);
        example.printSomething("Some message.");
        example.printSomething("Meaning of life: ", 42);
    }
}

Java распознает метод не только по идентификатору (имени) но и по аргументам.

Перегрузка методов — один из способов поддержки полиморфизма в Java.

Результаты работы метода

Результатом работы метода является то, что он возвращает в место своего вызова. Например, метод int sum(int a, int b) обязан вернуть результат типа int. Результат работы этого метода можно использовать в месте вызова этого метода. Пример в коде:

public class Main {
    public static int sum(int a, int b) {
        return a + b;
    }

    // Используем результат работы метода sum в методе main.
    public static void main(String[] args) {
        System.out.println(sum(10, 10)); // Выводим на экран результат.
        int result = sum(2, 2); // Сохраняем результат в переменную.
        sum(50, 50); // Ничего не делаем с результатом (плохая практика, так не нужно делать).
    }
}

return

return — это ключевое слово, которое завершает работу метода именно в том месте, где оно написано в теле текущего метода. Кроме этого, return возвращает результат выражения, следующего за ним, в место откуда был вызван текущий метод. Например в коде:

public static int sum(int... numbers) {
    int result = 0;
    for (int number : numbers) { // Этот код пройдется по всем числам и сложит их.
        result = result + number;
    }
    return result;
}

метод будет завершен в конце, после всех обозначенных задач над ним, в теле этого метода. Но если мы поменяем расположение return в этом методе вот так:

public static int sum(int... numbers) {
    int result = 0;
    return result;
    for (int number : numbers) { // Этот код пройдется по всем числам и сложит их.
        result = result + number;
    }
}

, то метод sum будет всегда выдавать результат 0. А все что после слова return в его теле — будет просто игнорироваться.

Слово return можно применять и в void методах, для преждевременного завершения их работы, если нужно. Например так:

void printSomething() {
    System.out.println("Сообщение из метода без аргументов.");
    return; // Поскольку после return нет выражений — он просто завершит работу метода.
    System.out.println("Lost."); // До этой строчки кода исполнение не дойдет.
}

Полезные ссылки


Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

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

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.

Об обучении на Хекслете

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 130 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»