2012-07-25 79 views
3

Java Language Specification, Chapter 14, Blocks and Statements这是什么意思,该语句S立即包含语句U?

的程序的执行的顺序由语句,这是 其效果执行并且不具有值控制。

某些语句包含其他语句作为其结构的一部分;这样的其他 语句是语句的子语句。我们假设语句S立即 包含语句U,如果没有语句T不同于S和U,那么 S包含T且T包含U.以相同的方式,某些语句包含 表达式作为其结构的一部分。

如果没有语句T不同于S和U使得S包含T且T包含U,那么语句S立即包含语句U是什么意思?

回答

4

某些语句包含其它语句作为其结构的一部分;这样的其他 语句是语句的子语句。

JLS #14.5定义语句:

声明:

  • StatementWithoutTrailingSubstatement
  • LabeledStatement
  • IfThenStatement
  • IfThenElseStatement
  • WhileStatement
  • ForStatement

所以,可以有子语句(=可以包含其他语句)的唯一语句标签,如果,否则,while和for。

然后含义变得更清晰 - 如果例如,S,T和U被定义为:

if(a == b) //S 
    if(c == d) //T 
     doSomething(); //U 

的statement直接包含语句t内直接包含语句U.但S不直接包含U.

0

考虑以下复合语句是S:

(a+b)+c 

令U是S内的发言(a+b)则S直接包含语句U.这是因为在S,从而使没有非平凡的语句Ť T包含U.

然而,如果我们有像

S: (a+(b+c))+d 

然后我们就可以让T为(a+(b+c))

+2

(a + b)是一个表达式,而不是语句 – 2012-07-25 23:41:45

+0

@代码大师:是的,你是对的,我的意思是用更抽象的术语来说明它。 – tskuzzy 2012-07-25 23:42:55

+0

@tskuzzy能否请你详细解释一下? – Aaron 2012-07-25 23:54:15

0

例如:

if (...) { // A 
    doSomething(); // B 

    if (...) { // C 
    doSomethingElse(); // D 
    } 
} 

用字母标记的行是语句。语句A包含语句B,C,和d以及仅立即含有B和C发言Ç直接包含语句D.

+0

从技术上讲,我不认为块是语句子态化(块被定义为'StatementWithoutTrailingSubstatement'),即C不是A的子状态。无可否认,哪个是哪个并不重要... – assylias 2012-07-26 00:08:44

+0

@assylias C是应该参考if语句。添加块的{}可能会在这里混淆这个问题。附:我想我理解你的评论,但并不完全顺利。这是一个编辑错误? – 2012-07-26 00:11:46

+0

我的评论看起来像我需要一些睡眠;-)主要观点是块技术上不能有子状态,我不认为你的例子适用于这个具体问题的上下文。第二点是:我不认为这很重要。据我所知,“立即包含”的概念被使用[在整个JLS中只有一次](http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html #jls-15.12.4.1)... – assylias 2012-07-26 00:20:06

相关问题