除了在方法/构造函数体内?
此外,构造函数是否可以返回某些内容?或者我可以只使用“return;
”而不使用任何表达式吗?
答案 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中说明。