Javaでは、特定のキーワードの後に文または文ブロックを続けることができます。たとえば、次のようにJavaでtry/catchまたはsynchronizedを実行するのになぜ文ブロックが必要ですか?
if (true)
System.out.println("true");
do
System.out.println("true");
while (true);
これもfor
ようなキーワードにも当てはまりコンパイルなど
if(true) {
System.out.println("true");
}
do {
System.out.println("true");
} while (true);
、while
など
しかし、いくつかのキーワードはこれを許可していません。にはブロックステートメントが必要です。 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でいくつかのキーワードは、ブロック文を必要としませんステートメント?これは言語デザインの不一致ですか、それとも何らかの理由がありますか?
私は、単一のステートメントのアプローチは、似たようなことが起きた場合にのみ、frownedされ、使用されると考えています。 cは同期されていないか試していないかもしれないので、おそらく "より安全な"オプションを使いました。 –
これは構文なので、 AFAIKブロックがなければならないという技術的理由はありません。自動的に作成できるからです。 –
私の推測は、FWIWです:言語の設計者は、学習に役立つのに似た構文を他の言語と同じにしたいと考えました。しかし、新しい言語機能が追加された場所を感じて、より良いコーディング標準であると感じるものを強制します。あるいは、あまり頻繁に使用されていない言語機能のために、彼らはより良いコーディングの考えのために行ったでしょうか? – Marvo