return关键字在Java中的void方法中做什么?


71

我正在查看路径查找教程,并且注意到方法return内的一条语句void(class PathTest,行126):

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

我是Java的新手。谁能告诉我为什么它在那里?据我所知,return内部不允许使用void方法。

Answers:


134

它只是在此时退出该方法。一旦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
}

6
我了解您的代码是说明性的,但仅供家长参考;我与那些相信每种方法应该只有一个return语句的人一起工作。我不是其中之一,但我确实相信在不使代码变得丑陋的情况下,尽可能减少返回的数量。
digitaljoel

3
是的,绝对不是要过度使用的东西,但是有时它会使它变得更容易并且仍然非常可读。
CookieOfFortune

5
我最喜欢的打破嵌套循环的方式:)
b1nary.atr0phy

2
没有返回值的return工作原理很像break在循环中,只是退出有问题的代码。关于函数的多个退出点的争论很多,有几种语言迫使您采用一种或另一种方式。我不在多个退出点上占据一席之地,但我要指出的是,离开函数会清理本地堆栈。
Michael Shopsin 2014年

27

您可以return使用void方法,但是不能返回任何值(如return 5;),这就是为什么他们将其称为void方法。有些人总是以return语句显式结束void方法,但这不是强制性的。但是,它可以用于提前离开函数:

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

20

关键字只是从调用堆栈弹出一个框架,将控件返回到函数调用之后的行。


9
哈哈。这是一个很好的答案,但是我怀疑Java的初学者真的会掌握您要说的内容。
富兰克林

@ElliotMok足够公平。我们都是从初学者开始的!
富兰克林'18


3

它退出该函数,不返回任何内容。

诸如此类的东西return 1;是不正确的,因为它返回整数1。


2

它的功能与带有指定参数的函数的返回相同,除了不返回任何内容(因为没有要返回的内容且将控制权传递回调用方法)外,它什么都不返回。


1

请参见此示例,您要有条件地添加到列表中。没有单词“ return”,将执行所有if并将其添加到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;
    }
}

ArrayList应该已经初始化为:ArrayList <String> list = new ArrayList <>();
The_Martian '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.