Javaでは、特定のキーワードの後にステートメントまたはステートメントブロックを続けることができます。例えば:
if (true)
System.out.println("true");
do
System.out.println("true");
while (true);
同様にコンパイルします
if(true) {
System.out.println("true");
}
do {
System.out.println("true");
} while (true);
for
これは、while
などのキーワードにも当てはまります。
ただし、一部のキーワードではこれが許可されていません。synchronized
ブロックステートメントが必要です。についても同じですtry ... catch ... finally
。これには、キーワードの後に少なくとも2つのブロックステートメントが必要です。例えば:
try {
System.out.println("try");
} finally {
System.out.println("finally");
}
synchronized(this) {
System.out.println("synchronized");
}
動作しますが、以下はコンパイルされません。
try
System.out.println("try");
finally
System.out.println("finally");
synchronized (this)
System.out.println("synchronized");
では、なぜJavaの一部のキーワードはブロックステートメントを必要とし、他のキーワードは単一ステートメントだけでなくブロックステートメントも許可するのでしょうか。これは言語設計の矛盾ですか、それともこれには特定の理由がありますか?