Подтвердить что ты не робот

Что означает возврат в конце метода void?

Я знаю, что метод void не возвращает никакого значения, но я все еще могу написать код типа

void nothingDohere() {return;}

Итак, как можно "void" работать с инструкцией "return" здесь?

4b9b3361

Ответ 1

Оператор return без значения может использоваться только в методе void (или конструкторе) и просто выполняет часть "get from the method now". Представьте, что оператор return-value имеет две цели:

  • Завершение выполнения текущего метода (через finally блоков, конечно)
  • Создание значения, вычисленного в методе, доступном для вызывающего

Оператор return в методе void просто достигает первого из них; второй не имеет смысла в методе void.

Из раздела 14.17 Спецификации языка Java:

Оператор return без выражения должен содержаться в теле метода, объявленного с использованием ключевого слова void, а не для возврата какого-либо значения (§8.4) или в тело конструктора (§8.8). Ошибка времени компиляции возникает, если оператор возврата появляется внутри инициализатора экземпляра или статического инициализатора (§8.7). Оператор return без Expression пытается передать управление вызывающему методу или конструктору, который его содержит. Если быть точным, оператор return без Expression всегда завершается внезапно, причина - возврат без значения.

Ответ 2

У вашего оператора возврата нет аргументов, поэтому он ничего не возвращает, поэтому возвращаемое значение является "void".

Ответ 3

В любой момент в методе, когда выполняется оператор return, он просто выходит из метода. Возвращаемое здесь просто заканчивает выполнение вашего метода здесь. Если вы попытаетесь что-то (некоторое значение) из метода void, например, return"xzy";
Вы получите сообщение об ошибке - Void methods cannot return a value

Ответ 4

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

Поэтому ваш пример кода:

void nothingDohere() {
    return ;
}

Завершает вызов метода и немедленно возвращается обратно вызывающему устройству метода.

Ответ 5

В упомянутом вами случае возвращение действительно семантически избыточно (хотя это и требуется синтаксически - Javac не будет компилироваться без этого возврата). Возврат завершает метод.

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

public void doDifferentThings(){
    if(){
        //something done
        return;
    }
    else{
        //something else done
        return;
    }
}

Некоторые считают, что этот плохой дизайн (противоречит одноточечной точке выхода), однако он может сохранить ваш код чище.

Ответ 6

Просто он возвращается изнутри метода void в положение, в котором программа вызывает этот метод:

public calss Test
{
    private boolean flag = true;
    public Test()
    {
        ...  // (1)
        ...  // (2)
        voidMethod();  // (3)
        ...  // (7)
        ...  // (8)
    }
    private void voidMethod()
    {
        ...  // (4)
        ...  // (5)
        if(flag) return;  // (6)
        ...
        ...
    }
}

Ответ 7

Когда вы возвращаетесь из функции, вы возвращаете элемент управления функции, вызывающей возвращаемую функцию. Если вы вернете значение, вызывающая функция получит это значение, иначе вызывающая функция получит только элемент управления.