语句S立即包含语句U是什么意思?

时间:2012-07-25 23:36:20

标签: java

来自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是什么意思?

3 个答案:

答案 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.