3

Java言語仕様、第14章、ブロックとステートメントから:

プログラムの実行順序は、その効果のために実行され、値を持たないステートメントによって制御されます。

一部のステートメントには、構造の一部として他のステートメントが含まれています。そのような他のステートメントは、ステートメントのサブステートメントです。S が T を含み、T が U を含む、S および U と異なるステートメント T がない場合、ステートメント S はステートメント U をすぐに含むと言います。同様に、いくつかのステートメントは、その構造の一部として式を含みます。

S が T を含み、T が U を含む、S および U と異なるステートメント T がない場合、ステートメント S がステートメント U をすぐに含むとはどういう意味ですか?

4

3 に答える 3

4

一部のステートメントには、構造の一部として他のステートメントが含まれています。そのような他のステートメントは、ステートメントのサブステートメントです。

JLS #14.5では、ステートメントを次のように定義しています。

声明:

  • StatementWithoutTrailingSubstatement
  • ラベル付きステートメント
  • IfThenステートメント
  • IfThenElseステートメント
  • Whileステートメント
  • Forステートメント

したがって、サブステートメントを持つことができる (= は他のステートメントを含むことができる) 唯一のステートメントは、ラベル、if、else、while、および for です。

次に、意味がより明確になります。たとえば、S、T、および U が次のように定義されている場合:

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

ステートメント S はすぐにステートメント U を含むステートメント T を含みますが、S はすぐに U を含みません。

于 2012-07-26T00:05:14.333 に答える
0

次の複合文を S とします。

(a+b)+c

U を(a+b)S 内のステートメントとします。この場合、S はすぐにステートメント U を含みます。これは、T が U を含むような非自明なステートメント T が S に存在しないためです。

ただし、次のようなものがある場合

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

次に、T を とすることができます(a+(b+c))

于 2012-07-25T23:40:04.870 に答える
0

例えば:

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

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

文字でラベル付けされた行はステートメントです。ステートメント A にはステートメント B、C、および D が含まれており、B と C のみがすぐに含まれます。ステートメント C にはすぐにステートメント D が含まれます。

于 2012-07-25T23:41:15.853 に答える