【问题标题】:What does the return keyword do in a void method in Java?Java 中的 void 方法中的 return 关键字有什么作用?
【发布时间】:2010-10-19 04:24:15
【问题描述】:

我正在查看a path finding tutorial,我注意到void 方法中的return 语句(PathTest 类,第 126 行):

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

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

【问题讨论】:

    标签: java methods return void


    【解决方案1】:

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

    【讨论】:

    • 我知道您的代码是说明性的,但仅供家长参考;我曾与相信每种方法应该只有一个返回语句的人一起工作。我不是其中之一,但我确实相信尽可能减少返回的数量,而不会使代码变得丑陋。
    • 是的,它绝对不是过度使用的东西,但有时它只是让它变得更容易,而且仍然非常可读。
    • 我最喜欢的打破嵌套循环的方式:)
    • 没有返回值 return 在循环中的工作方式很像 break,只是简单地退出有问题的代码。有很多关于函数的多个出口点的激烈战争,并且一些语言迫使你采取一种或另一种方式。我不会在多个退出点上持立场,但我会指出,离开函数会清理本地堆栈。
    【解决方案2】:

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

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

    【讨论】:

    • 为什么我们不能使用break 来代替?
    【解决方案3】:

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

    【讨论】:

    • 哈哈。这是一个很好的答案,但我怀疑 java 初学者是否真的能理解你想说的。
    • @ElliotMok 够公平的。我们都是初学者!
    • 这是一个好习惯还是不管我们是否写return;
    【解决方案4】:

    Java 语言 specification 表示,如果您的方法返回 void,则可以不带表达式地返回。

    【讨论】:

      【解决方案5】:

      退出函数,什么也不返回。

      return 1; 之类的内容不正确,因为它返回整数 1。

      【讨论】:

        【解决方案6】:

        它的功能与带有指定参数的函数的 return 相同,只是它什么都不返回,因为没有什么要返回,控制权被传递回调用方法。

        【讨论】:

          【解决方案7】:

          看这个例子,你想有条件地添加到列表中。如果没有“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 list = new ArrayList();
          猜你喜欢
          • 2020-08-23
          • 2017-01-17
          • 1970-01-01
          • 2015-09-21
          • 2015-10-13
          • 1970-01-01
          • 1970-01-01
          • 2012-07-06
          • 2016-08-09
          相关资源
          最近更新 更多