声明与。堵塞

Statement Vs. Block

我是新 java 用户。最近我了解到,在 java 中,每个语句都以分号 (;) 结束,每个块由一对 ob 花括号分隔 - {} (如果我错了,请纠正我)。

但在很多地方我发现作家都在说 if 声明。所以我的问题是 statement 和 java 中的 block 有什么区别?

提前致谢。

您的定义是正确的。 if 是一个语句,即使它没有以分号结尾。

一般来说,如果程序构造产生一个值那么它就是表达式,否则就是语句。 Java 与其他语言(Scala、Groovy、...)不同,if 是语句而不是表达式。

语句是块的一部分。块包含由分号分隔的语句,但它本身也是一个语句。在 BNF 中:

statement := block | ...
block := '{' { block | (statement ';') } '}'

如果实际上两者都是典型的。

if 语句本身就是一个控制流语句。如果该语句被评估为真,它会执行该语句,或在它之后阻塞。换句话说,如果您只想执行一行代码,则不需要 if 之后的块。

所以,请原谅我的袖口 java,您可以选择以下任何一种:

if(someboolean)
    DoSuff();

 if(someboolean) {
    DoSuff();
  }

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html

Java Language Specification 正式定义块和语句。为了简化它所说的:

  • 不是 Java 中的每个语句都以分号结尾。这是考虑它们的一种便捷方式,但形式上并不正确。
  • 有些语句在其定义中包含分号。这些通常是简单的陈述。例如:
    • 空语句只是一个分号:;.
    • 表达式语句是一组允许的表达式之一,后跟一个分号。 new ClassName();System.out.println();i++;
  • 块是一种包含声明和其他用大括号包围的语句的语句 { int i = 1; System.out.println(i); }
  • 一些语句是使用其他语句构建的。他们的定义不包括分号。如果子语句以分号结尾,则这些语句以分号结尾。 if 语句属于此类。它构建为 if ( <i>expression</i> ) <i>statement</i> 。所以如果它里面的 statement 部分有分号,它就以分号结束。如果它里面的statement恰好是一个块(这是一种语句!),那么它以大括号结束:

    if ( a == b )
       System.out.println(a);
    

    对比

    if ( a == b ) {
       System.out.println(a);
    }
    

    第一种格式,if的子语句是表达式语句(方法调用是表达式语句,表达式语句以分号结尾)。

    在第二种格式中,if的子语句是块语句,其中包含单个表达式语句。所以 if 以块的大括号结束,而不是以分号结束。

底线:语句是通过属于某些正式类别来定义的。有些以分号结尾,有些则没有。