无法理解Java语句的定义

时间:2014-05-19 04:40:49

标签: java jls

我想我理解这一部分: "有些陈述包含其他陈述作为其结构的一部分;这些其他陈述是陈述的替代。"

资料来源:(第二段) http://docs.oracle.com/javase/specs/jls/se8/html/jls-14.html

如果我错了,请纠正我:这是指方法调用,其中包含多个语句。这也是指在初始化时执行某些操作(如计算或连接字符串)等操作。

我遇到麻烦的是: "我们说语句S立即包含语句U如果没有语句T不同于S和U使得S包含T而T包含U"

我不会撒谎,他们在这里完全失去了我。我无法在脑海中想象这一点,或者在纸上写下来。措辞让我完全糊涂了。

有人可以解释这是一种比较容易理解的时尚吗?

2 个答案:

答案 0 :(得分:2)

如果你有例如

if (Expression1)
  while (Expression2)
    Statement1

然后IfThenStatement立即包含WhileStatement。它还包含Statement1,但不会立即包含Statement1

参考JLS规范中使用的符号S是包含IfThenStatement T的WhileStatement,而Statement1 T又包含{{1}} U.因此S 不会立即< / em>包含U。

答案 1 :(得分:1)

我认为这是指“彼此之间有多接近”。

我想你可以将这些陈述想象成一棵树。 “整体”语句是根,而子语句是子语句。什么“S立即包含U”可以粗略地理解为语句树中的“S是U的直接父” - 也就是说,存在从S到U的直接链接,中间没有节点。

这就是那句话所说的。 “没有与S和U不同的陈述T,使得S包含T而T包含U” - &gt; “没有节点T与S和U不同,因此U的父级是T而T的父级是S”

如果你知道AST是如何工作的,我想这可能更有意义......

另外,关于第一部分:

句子“有些语句包含其他语句作为其结构的一部分;其他语句是语句的子语句”并不专门引用方法调用;实际上,所有三种类型的语句(表达式,声明和控制流)都可能有子语句。您可以在声明(例如初始化)时使用表达式。您可以在控制流语句中声明(例如for循环)。等等。

例如,if-then语句定义如下:

IfThenStatement:

if ( 表达式 ) 声明

在这种情况下,你有一个if-then语句的子语句而没有看到方法调用。

但是,除了你提到的其他情况之外,你是正确的,方法调用是你可以拥有子语句的地方之一。