JavaRush /Курсы /JAVA 25 SELF /Возвращаемые значения, return

Возвращаемые значения, return

JAVA 25 SELF
8 уровень , 3 лекция
Открыта

1. Введение

Давайте начнём с вопроса: зачем вообще методу что-то возвращать? Почему нельзя просто всё делать внутри метода, а результат выводить на экран?

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

  • Метод вычисляет сумму двух чисел и возвращает её, чтобы мы могли использовать результат для дальнейших расчётов.
  • Метод определяет, является ли число чётным, и возвращает true или false, чтобы мы могли принять решение.
  • Метод возвращает строку приветствия для пользователя, а мы решаем, куда её передать — вывести на экран, записать в файл, отправить по сети.

Если бы методы всегда просто печатали результат, наша программа была бы жёстко привязана к одному сценарию, и переиспользовать логику было бы сложно. Возвращаемое значение делает методы гибкими и универсальными.

Аналогия

Представьте себе кофейный автомат. Вы кладёте деньги, нажимаете кнопку — и получаете кофе. Если бы автомат просто громко говорил «Кофе сварен!» (но не выдавал кофе), вы бы не обрадовались. Так и с методами: иногда хочется не просто услышать «Готово!», а получить результат.

2. Тип возвращаемого значения: что может возвращать метод

В Java, когда вы объявляете метод, вы указываете тип возвращаемого значения — это может быть любой тип: int, double, String, boolean, массив, даже объект вашего собственного класса. Если метод ничего не возвращает — пишем void.

Синтаксис:

тип_возвращаемого_значения имяМетода(параметры)
{
    // тело метода
}
Сигнатура метода

Примеры:

int sum(int a, int b) 
{
    // возвращает int
}

String getGreeting(String name) 
{
    // возвращает String
}

boolean isEven(int number) 
{
    // возвращает boolean
}

void printHello() 
{
    // ничего не возвращает — просто выполняет действие
}

Важно! Тип возвращаемого значения — это «обещание» метода: он обязан вернуть значение этого типа. Если вы пообещали вернуть int, а возвращаете String — компилятор будет возмущён и не даст собрать программу.

3. Оператор return: как вернуть значение из метода

Чтобы действительно отдать результат работы метода «наружу», используется оператор return. Это слово говорит: «Вот, держи результат — и на этом моя работа закончена».

int sum(int a, int b) 
{
    int result = a + b;
    return result; // возвращаем результат
}
Возврат значения через return

Можно и короче:

int sum(int a, int b) 
{
    return a + b;
}

Когда метод доходит до строки return, он завершает выполнение, возвращает указанное значение и передаёт его туда, откуда был вызван.

Важно: тип значения после return должен совпадать с объявленным типом метода.

4. Использование возвращаемого значения: куда его девать?

Когда метод возвращает значение, вы можете:

  • Сохранить его в переменную.
  • Использовать прямо в выражении.
  • Передать другому методу.
int result = sum(5, 7); // сохраняем в переменную
System.out.println(result); // выводим результат

System.out.println(sum(10, 20)); // сразу выводим результат

if (isEven(42)) 
{
    System.out.println("Число чётное!");
}

Пример: метод, возвращающий строку

String getGreeting(String name) 
{
    return "Привет, " + name + "!";
}

// Использование:
String greeting = getGreeting("Алиса");
System.out.println(greeting); // Привет, Алиса!

5. Практика: примеры методов с возвращаемым значением

Метод, возвращающий максимум из двух чисел

int max(int a, int b) 
{
    if (a > b) 
    {
        return a;
    } 
    else 
    {
        return b;
    }
}

Можно даже короче, если вы уже освоили тернарный оператор:

int max(int a, int b) 
{
    return (a > b) ? a : b;
}

Использование:

int maximum = max(10, 25);
System.out.println("Максимум: " + maximum); // Максимум: 25

Метод, который возвращает true, если число чётное

boolean isEven(int number) 
{
    return number % 2 == 0;
}

Использование:

if (isEven(18)) 
{
    System.out.println("Число чётное!");
} 
else 
{
    System.out.println("Число нечётное!");
}

Метод, возвращающий сумму элементов массива

int sumArray(int[] arr) 
{
    int sum = 0;
    for (int i = 0; i < arr.length; i++) 
    {
        sum += arr[i];
    }
    return sum;
}

Использование:

int[] grades = {5, 4, 3, 5, 4};
int total = sumArray(grades);
System.out.println("Сумма оценок: " + total);

6. Что происходит при вызове метода с return

Когда вы вызываете метод с возвращаемым значением, выполнение программы как бы «заходит» внутрь метода, выполняет его код, доходит до return, возвращает значение — и подставляет его на место вызова.

Схематично:

int a = 2;
int b = 3;
int c = sum(a, b); // здесь вызывается sum(2, 3), возвращается 5, c становится равен 5

Блок-схема

        graph TD
        A["main"] --> B["sum(a, b)"]
        B --> C[вычисления]
        C --> D[return result]
        D -->|результат возвращается| A
    

7. Полезные нюансы

return завершает выполнение метода

Как только в методе встречается return, выполнение метода мгновенно прерывается. Всё, что написано после — не выполняется.

int test()
{
    return 42;
    System.out.println("Это не будет напечатано"); // unreachable
}

return в методе с типом void

В методе void (который ничего не возвращает) можно использовать return без значения — просто чтобы досрочно завершить выполнение метода, например, при каком-то условии.

void printPositive(int number)
{
    if (number <= 0) 
    {
        System.out.println("Число не положительное!");
        return; // просто выходим из метода
    }
    System.out.println("Число: " + number);
}

8. Типичные ошибки при работе с return

Ошибка № 1: Не все пути возвращают значение

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    }
    // А если number <= 0? Нет return!
}
// Ошибка: не все ветви кода возвращают значение

Как исправить: всегда предусматривать return на всех путях выполнения.

int getSign(int number)
{
    if (number > 0) 
    {
        return 1;
    } 
    else if (number < 0) 
    {
        return -1;
    } 
    else 
    {
        return 0;
    }
}

Ошибка № 2: Несовпадение типа возвращаемого значения

int getNumber()
{
    return "42"; // Ошибка! Ожидался int, а не String
}

Ошибка № 3: return после return

int test()
{
    return 5;
    System.out.println("Это не выполнится"); // unreachable statement
}

Ошибка № 4: return с выражением в void-методе

void printSomething()
{
    return 42; // Ошибка! void-метод не может возвращать значение
}

Ошибка № 5: Игнорирование возвращаемого значения

sum(10, 20); // и всё? Результат пропал!

Если вы не используете возвращаемое значение, оно просто теряется. Не забывайте его сохранять или передавать дальше по коду!

Ошибка № 6: Ожидание, что return что-то напечатает

int result = sum(2, 3);
// return ничего не печатает!
// Нужно явно вывести:
System.out.println(result);
1
Задача
JAVA 25 SELF, 8 уровень, 3 лекция
Недоступна
Умный помощник для персонализированных обращений 🤖
Умный помощник для персонализированных обращений 🤖
1
Задача
JAVA 25 SELF, 8 уровень, 3 лекция
Недоступна
Детектор четности для игровой викторины ❓
Детектор четности для игровой викторины ❓
1
Задача
JAVA 25 SELF, 8 уровень, 3 лекция
Недоступна
Выбор победителя в соревновании по очкам 🏆
Выбор победителя в соревновании по очкам 🏆
1
Задача
JAVA 25 SELF, 8 уровень, 3 лекция
Недоступна
Подсчет общего балла за все тесты студента 📚
Подсчет общего балла за все тесты студента 📚
Комментарии (13)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Iskander Уровень 18
26 декабря 2025
последнюю задачу решил так: int sum = 0; for (int score: studentExamResults){ sum +=score; } return sum;
Hipsta Krippo Уровень 28
30 ноября 2025
"Ошибка № 3: return после return" - наверное, тут опечатка автора лекции. Должно быть что-то типа "Действия после return" или "Код после return в теле метода".
Emil Уровень 16
17 ноября 2025
Задачки ни о чем. Все темплейты готовые - буквально выводишь текст и задача решена, ни интереса, ни элементов обучалки =( Писать с нуля классы и методы - лучший выбор, как по мне
10 декабря 2025
На работе придётся часто читать уже написанный кем-то код и вставлять свой в нужном месте. Потихоньку тебя к этому готовят.
PavelP Уровень 13
24 декабря 2025
Класс писать , чтобы что? чтобы класс писать? Наверняка не в блокноте писать будешь Ну а справедливости ради, можно и по сложнее задания немного делать, а не просто return вставлять.
Emil Уровень 16
3 января 2026
чтобы машинальную память развить и дольше думать над тем что пишешь, а не просто пользоваться готовым, сейчас задача за 30 сек решается и забывается
Kidze Уровень 23
19 октября 2025
Было бы лучше если бы нам приходилось хотя бы методы с параметрами в задачах писать самим и комментариев поменьше в качестве подсказок.
Grrbrr7 Уровень 25
22 октября 2025
Согласен. Поэтому сначала удаляю всё предзаполненное а затем пишу сам.
Dthmth Уровень 11
25 октября 2025
Скорее всего расчет на то, что дальше все будем писать руками. Сейчас задачи скорее на System.out чаще, нежели на тему лекции :)
11 октября 2025
В сигнатуру метода входят только имя и параметры метода
Alina Gabidulina Уровень 30
7 октября 2025
что в старом курсе, что в новом задачи не всегда идут в конце лекции, не понимаю так и нужно или это баг?
Anonymous #3656771 Уровень 20
24 октября 2025
ответ на этот вопрос через 2 лекции
Javahue Уровень 16
28 ноября 2025
Это не баг, а фича)