我想这更多是关于语言理论的问题,而不是其他任何问题。为什么第一条陈述在主要法律中是合法的,而第二条陈述却没有?他们不认为是同一回事吗?
public class Main {
public static void main(String[] args) {
foo();
0;
}
public static int foo(){
return 0;
}
}
最佳答案
Java限制了所谓的“表达式语句”中允许的表达式类型。仅允许具有潜在副作用的有意义的表达式。它不允许在语义上无意义的语句,例如0;
或a + b;
。它们只是从语言语法中排除。
像foo()
这样的函数调用通常会产生副作用,因此这并不是毫无意义的声明。编译器不会深入检查foo()
的主体以检查其是否实际执行了任何操作。调用函数可能会有副作用,因此在语法上是有效的。
这反射(reflect)了C/C++与Java之间的哲学差异。 Java禁止使用各种构造,这些构造会导致无效或无意义的代码。
return;
foo(); // unreachable statement
C和C++在这方面相对宽松。随便写什么他们没有时间照顾你。
引用Java Language Specification, §14.8 Expression Statements: