来自Java Language Specification, Chapter 14, Blocks and Statements:
程序的执行顺序由语句控制,这些语句是 为了它们的效果而被执行并且没有值。
有些陈述包含其他陈述作为其结构的一部分;这样的 语句是语句的子语句。我们马上说声明S. 如果没有与S和U不同的语句T,则包含语句U. S包含T,T包含U.同样,一些语句包含 表达式作为其结构的一部分。
如果没有与S和U不同的语句T使得S包含T且T包含U,则语句S立即包含语句U是什么意思?
答案 0 :(得分:4)
有些陈述包含其他陈述作为其结构的一部分;这样的 陈述是陈述的替代。
JLS #14.5将语句定义为:
声明:
- StatementWithoutTrailingSubstatement
- LabeledStatement
- IfThenStatement
- IfThenElseStatement
- WhileStatement
- ForStatement
因此,唯一可以具有子语句(=可以包含其他语句)的语句是标签,if,else,while和for。
然后意义变得更加清晰 - 例如,如果S,T和U被定义为:
if(a == b) //S
if(c == d) //T
doSomething(); //U
语句S立即包含语句T,它立即包含语句U.但是S不会立即包含U。
答案 1 :(得分:0)
请考虑以下复合语句为S:
(a+b)+c
设U是S中的(a+b)
语句。然后S立即包含语句U.这是因为S中没有非平凡的语句T,因此T包含U.
但是,如果我们有像
这样的东西S: (a+(b+c))+d
然后我们可以让T为(a+(b+c))
。
答案 2 :(得分:0)
例如:
if (...) { // A
doSomething(); // B
if (...) { // C
doSomethingElse(); // D
}
}
标有字母的行是陈述。语句A包含语句B,C和D,只有立即包含B和C.语句C立即包含语句D.