Java:不是声明

扫码查看

我想这更多是关于语言理论的问题,而不是其他任何问题。为什么第一条陈述在主要法律中是合法的,而第二条陈述却没有?他们不认为是同一回事吗?

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:

10-01 03:07
查看更多