在Java中,哪里可以出现return语句?

时间:2011-01-31 19:18:37

标签: java return-value return

除了在方法/构造函数体内?

此外,构造函数是否可以返回某些内容?或者我可以只使用“return;”而不使用任何表达式吗?

6 个答案:

答案 0 :(得分:7)

  

在Java中,返回语句出现在哪里?除了在方法/构造函数体内?

仅在构造函数或方法中:

JLS - http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6767

  

return语句将控制权返回给 方法(§8.4,§15.12)或构造函数(§8.8,§15.9) 的调用者。


  

此外,构造函数是否可以返回某些内容?

没有

JLS - http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6767

  

带有表达式 的返回语句必须包含在 方法 声明中>声明返回值 (§8.4)或发生编译时错误。


  

或者我只能使用“返回”;没有任何表达式吗?

JLS - http://java.sun.com/docs/books/jls/second_edition/html/statements.doc.html#6767

  

使用关键字void声明的方法体中必须包含没有Expression的返回语句 ,不返回任何值(§8.4) , 或构造函数体(§8.8)

答案 1 :(得分:5)

此问题以及许多其他语言律师问题的真实来源是Java Language Specification,在本例中为section 14.17

  

return语句将控制权返回给方法(§8.4,§15.12)或构造函数(§8.8,§15.9)的调用者。

     

ReturnStatement:
  返回表达式 opt ;

     

没有表达式的return语句必须包含在声明的方法体中,使用关键字void,不返回任何值(第8.4节),或者在构造函数体(§8.8)中。如果返回语句出现在实例初始化程序或静态初始化程序(第7.7节)中,则会发生编译时错误。没有Expression的return语句尝试将控制权转移给包含它的方法或构造函数的调用者。

     

确切地说,没有表达式的return语句总是突然完成,原因是没有值的返回。

请注意,这明确地指出您可以在构造函数中使用return语句 - 但它 将其限制为构造函数和方法。

答案 2 :(得分:4)

return语句可以出现在方法或构造函数的任何地方。

返回后应跟随与返回类型方法兼容的值。如果method为void,则返回不返回任何内容。

构造函数根本没有返回类型(根据定义)。因此,如果将return语句写入构造函数,则不应该跟随任何值。

答案 3 :(得分:0)

您可以在返回类型为void的方法中使用return而不返回值。在其他方法中,这是不可能的。

例如

    public void test(String s) {
       if (s.equals("")) {
          return;
       }
    }

构造函数不应该在其体内有一个return语句,因为根据定义,构造函数没有返回类型。

编辑:正如Jon Skeet指出的那样,构造函数可以有没有值的返回语句,但在大多数情况下,这不会被使用。

答案 4 :(得分:0)

我不确定可以使用return语句的确切位置(或者正是规范所说的)。它们最常用于返回值的方法中(或者没有返回值的end方法)。

构造函数不能返回任何值。调用构造函数将使VM为您正在创建的对象的大小分配内存,然后调用对象中的相应构造函数,这与调用方法的过程不同。可以使用return语句,但是不能从构造函数本身返回任何值。

要从构造函数“返回”信息(更恰当地说,在构造期间指出某些错误),可以使用异常。

答案 5 :(得分:0)

我更喜欢在方法中只有一个return语句而在构造函数中没有return语句。对于你从这个最佳实践中获得的东西进行比较,再一个级别的缩进通常是一件微不足道的事情。它通常使代码更具可读性。如果我有一个局部变量用于最后返回的值,它通常让我可以将该变量声明为final,这样我就可以绝对确定该变量只分配了一次。通常,这可以让您深入了解算法的实际复杂性。但是,我确实在方法中使用了几个throws语句。另外,我更喜欢按合同设计,在方法开头检查前提条件并在javadoc中说明。