声明对比块

时间:2015-03-21 17:35:54

标签: java if-statement block

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

但在许多地方我发现作家都在说if陈述。所以我的问题是java中 statement block 之间的区别是什么?

提前致谢。

4 个答案:

答案 0 :(得分:5)

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

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

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

    VS

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

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

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

底线:声明由属于某些正式类别定义。其中一些以分号结尾,有些则没有。

答案 1 :(得分:1)

您的定义是正确的。 if是一个声明,即使它不以分号结尾。

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

答案 2 :(得分:1)

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

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

所以,请原谅我的袖口java,你可以拥有以下任何一种:

if(someboolean)
    DoSuff();

或者

 if(someboolean) {
    DoSuff();
  }

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

答案 3 :(得分:0)

声明是块的一部分。块包含以分号分隔的语句,但也是语句本身。在BNF:

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