程序的执行顺序是由语句控制的,这些语句是为了执行它们的效果而执行的,并且没有值。
一些语句包含其他语句作为其结构的一部分;此类其他陈述是该陈述的子陈述。如果不存在不同于 S 和 U 的语句 T 使得 S 包含 T 并且 T 包含 U,则我们说语句 S 立即包含语句 U。以同样的方式,某些语句包含表达式作为其结构的一部分。
如果没有不同于 S 和 U 的语句 T 使得 S 包含 T 并且 T 包含 U,那么语句 S 立即包含语句 U 是什么意思?
程序的执行顺序是由语句控制的,这些语句是为了执行它们的效果而执行的,并且没有值。
一些语句包含其他语句作为其结构的一部分;此类其他陈述是该陈述的子陈述。如果不存在不同于 S 和 U 的语句 T 使得 S 包含 T 并且 T 包含 U,则我们说语句 S 立即包含语句 U。以同样的方式,某些语句包含表达式作为其结构的一部分。
如果没有不同于 S 和 U 的语句 T 使得 S 包含 T 并且 T 包含 U,那么语句 S 立即包含语句 U 是什么意思?
一些语句包含其他语句作为其结构的一部分;此类其他陈述是该陈述的子陈述。
JLS #14.5将语句定义为:
陈述:
- StatementWithoutTrailing 子语句
- 标签声明
- IfThen 语句
- IfThenElse 语句
- While 语句
- 声明
因此,唯一可以有子语句(= 可以包含其他语句)的语句是标签、if、else、while 和 for。
然后含义变得更加清晰 - 例如,如果将 S、T 和 U 定义为:
if(a == b) //S
if(c == d) //T
doSomething(); //U
语句 S 立即包含语句 T,而语句 T 立即包含语句 U。但 S 不立即包含 U。
考虑以下复合语句为 S:
(a+b)+c
令 U 为 S 中的语句(a+b)
。那么 S 立即包含语句 U。这是因为在 S 中不存在非平凡语句 T 使得 T 包含 U。
但是,如果我们有类似的东西
S: (a+(b+c))+d
然后我们可以让 T 为(a+(b+c))
。
例如:
if (...) { // A
doSomething(); // B
if (...) { // C
doSomethingElse(); // D
}
}
标有字母的行是语句。语句 A 包含语句 B、C 和 D,并且仅立即包含 B 和 C。语句 C 立即包含语句 D。