2009-04-13 5 views
50

Я смотрю на a path finding tutorial, и я заметил return заявление внутри метода void (класс PathTest, строка 126):Что делает ключевое слово return в методе void в Java?

if ((x < 0) || (y < 0) || (x >= map.getWidthInTiles()) || (y >= map.getHeightInTiles())) { 
    return; 
} 

Я новичок в Java. Может ли кто-нибудь сказать мне, почему он там? Насколько мне известно, return внутри метода void недопустим.

ответ

94

Он просто выходит из метода в этот момент. Как только return будет выполнен, остальная часть кода не будет выполнена.

например.

public void test(int n) { 
    if (n == 1) { 
     return; 
    } 
    else if (n == 2) { 
     doStuff(); 
     return; 
    } 
    doOtherStuff(); 
} 

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

if (n == 3) { 
    return; 
    youWillGetAnError(); //compiler error here 
} 
+4

Я понимаю, что ваш код является иллюстративным, но для информации о родителях; Я работал с людьми, которые считают, что каждый метод должен иметь только один оператор return. Я не один из них, но верю в минимизацию количества возвращений как можно больше, не делая код уродливым в этом. – digitaljoel

+2

Да, это определенно не то, чтобы злоупотреблять, но иногда это просто делает его намного проще и все еще может быть очень читаемым. – CookieOfFortune

+2

Мой любимый способ взломать из вложенных циклов :) –

22

Вы можете return в методе ничтожной, вы просто не можете возвращать никакого значения (как в return 5;), поэтому они называют это void. Некоторые люди всегда явно закрывают методы void с помощью оператора return, но это необязательно. Он может использоваться, чтобы оставить функцию рано, хотя:

void someFunct(int arg) 
{ 
    if (arg == 0) 
    { 
     //Leave because this is a bad value 
     return; 
    } 
    //Otherwise, do something 
} 
12

Java-язык specification говорит, что вы можете иметь возврат без выражения, если ваш метод возвращает недействительным.

2

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

2

Он выходит из функции и ничего не возвращает.

Нечто подобное return 1; было бы неправильно, так как он возвращает целое число 1.

14

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

+6

Ха-ха. Это отличный ответ, но я сомневаюсь, что новички в java действительно поймут, что вы пытаетесь сказать. – franklin

1

См. Этот пример, который вы хотите добавить к списку условно. Без слова «return» все ifs будут выполнены и добавлены в ArrayList!

Arraylist<String> list = new ArrayList<>(); 

    public void addingToTheList() { 

    if(isSunday()) { 
     list.add("Pray today") 
     return; 
    } 

    if(isMonday()) { 
     list.add("Work today" 
     return; 
    } 

    if(isTuesday()) { 
     list.add("Tr today") 
     return; 
    } 
} 
+0

ArrayList должен быть инициализирован как: ArrayList list = new ArrayList <>(); –

Смежные вопросы