声明与。堵塞
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
以块的大括号结束,而不是以分号结束。
底线:语句是通过属于某些正式类别来定义的。有些以分号结尾,有些则没有。
我是新 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
以块的大括号结束,而不是以分号结束。
底线:语句是通过属于某些正式类别来定义的。有些以分号结尾,有些则没有。